Autor Zpráva
noris
Profil
Ahoj,
mám script, který po zaškrtnutí checkboxu dotyčný chbox přesune do jiného divu, získá jeho name a uloží do JSON.
Potřeboval bych tam upravit to, aby při zaškrtnutí chboxu se name do jsonu přidal (to mi funguje) ale také aby se při odškrtnutí daný name z jsonu odebral (to se mi právě nedaří).

Dále bych rád upravil script aby mohl fungovat pro několik vstupních parametrů (přesněji by se měnily data, obj a poté výstupní pchecked).
Když ale změním vstupní a výstupní data, stále tu jsou některé funkce a proměné, které mají stejné jméno a tudíž kolidují.
Tento script budu používat více jak třikrát a budou se měnit pouze (obj, data a pchecked), proto mi přijde nevyhovující kopírovat script a přejmenovávat v něm všechny proměnné atd.

<script> 
var data = [
{label: 'name', id: '1'},
{label: 'name2', id: '2'},
{label: 'name3', id: '3'}
]
var obj = { 
a: document.getElementById('fprograms'), 
b: document.getElementById('chprograms') 
};
var pchecked = [];
selected = ""; 

function check(chbox,obj,data) 
{ 
data[chbox.value*1].check = chbox.checked; 
write(obj,data);
selected = chbox.getAttribute("name"); 
$.ajax({
                url: 'result.php',
                data: pchecked,
                type: "POST",
                success: function() {
                pchecked.push(selected);
                $( "#listresult" ).load('result.php');
                },
            });
};
function write(obj,data) 
{ 
var i,str; 
str  = {a:'',b:''}; 
for (i=0;i<data.length;i++) 
{ 
if (!(data[i].check)) 
     {str.a+='<li><input type=checkbox value =' + i + ' onchange="check(this,obj,data)" name='+data[i].id+'>' + data[i].label + '</li>';} 
else {str.b+='<li><input type=checkbox onchange="check(this,obj,data)" name='+data[i].id+' value = '+ i + ' checked="checked">' + data[i].label + '</li>'} 
} 
obj.a.innerHTML = str.a; 
obj.b.innerHTML = str.b;
} 
write(obj,data);

      
</script>

Všem moc děkuji za pomoc
_______________________
Upraveno zadání aby se týkalo přímo JS a z kódu odstraněno php.
_es
Profil
noris:
Ak ide o problém s JS kódom, tak by bolo dobré dotaz prerobiť na problém len JS kódu. Asi sa nikomu nebude chcieť rozmýšľať, akú zmes HTML a JS ten PHP kód potenciálne môže vygenerovať a ešte čo potom bude robiť JS kód. Možno máš problémy v základoch: Nejčastější potíže s PHP (FAQ)
noris
Profil
_es:
Děkuji za připomínku, kód i vysvětlení problému přepsáno, nyní neobsahuje žádné php a týká se jen JS.
_es
Profil
noris:
Je to také nejaké celé neprehľadné. Skús to nejako prerobiť, aby sa v tom dalo lepšie vyznať. Mixuješ trebárs jQuery metódy s „normálnymi“ DOM metódami - okrem toho, že sa v tom celkovo nedá vyznať.

chbox.getAttribute("name")
Viď Časté potíže, zajímavosti a poučné debaty » Problémy se setAttribute/getAttribute.

selected = "";
Viď Časté potíže, zajímavosti a poučné debaty » Používejte var.

získá jeho name a uloží do JSON.
Znova, do nijakého „JSON“ to nedávaš ( Uložení dat do jsonu pomocí jquery). Musíš si rozmyslieť, s akými premennými, hodnotami, aj akého typu, v JS pracuješ.
aby se při odškrtnutí daný name z jsonu odebral
Zrejme pod „JSONom“ myslíš pole (objekt Array), zmazanie nejakého jeho prvku, aj s posunutím iných prvkov, spravíš metódami pop, shift alebo splice.
noris
Profil
_es:
Okomentoval jsem ten script, takže by mělo být trochu jasnější co co dělá, a trošičku upravím můj dotaz.
Mám ted pchecked.push(chbox.getAttribute("name")); tím do pchecked přidám id zvoleného checkboxu a delete pchecked[chbox.getAttribute("name")]; zase z pchecked zvolené id odeberu, jelikož sem v javascriptu a jquery nováček, nevím kam tyto dva příkazy umístit aby fungovali tak jak chci, tedy při zaškrtnutí chboxu id do pchecked vloží a při odškrtnutí ho z pchecked smaže.

Druhý problém s opakováním, pomocí php si vypíšu do proměných a ty vložím do scriptu (v podstatě vypíšu pomocí php script 2krát ale pokaždé s rozdílnýma hodnotama, vznikne mi ale něco takovéhle http://seagine.cermakpavel.com/cycle.php (a to jsem v kódu všechno dal do var). Jediný případ kdy mi to fungovalo bylo, když jsem kompletně přejmenoval všechny proměné, objekty a funkce.
<script> 
//vložíme záznamy do data
var data = [
{label: 'name', id: '1'},
{label: 'name2', id: '2'},
{label: 'name3', id: '3'}
]
//obj získá informace kam vypsat data a kam přesunot zvolené checkbox
var obj = { 
a: document.getElementById('fprograms'), 
b: document.getElementById('chprograms') 
};
//jedná se o objekt, který se posílá php souboru
var pchecked = [];
//do selected se ukládá parametr id z vybraných dat z proměné data
selected = ""; 
 
function check(chbox,obj,data) 
{ 
data[chbox.value*1].check = chbox.checked; //zjisti jestli je zaškrtnutý checkbox
write(obj,data);
selected = chbox.getAttribute("name"); //získej id číslo zvoleného checkboxu, id číslo je uloženo pod name="id"
$.ajax({ //tato ajax funkce odešle array objekt s id čísly php souboru
                url: 'result.php',
                data: pchecked, 
                type: "POST",
                success: function() {
                pchecked.push(selected); //uložení zvolených id čísel (selected) do objektu pchecked, který se bude odesílat
                $( "#listresult" ).load('result.php'); //nahraj php soubor
                },
            });
};
function write(obj,data) 
{ 
var i,str; 
str  = {a:'',b:''}; 
for (i=0;i<data.length;i++) 
{ 
if (!(data[i].check)) 
     {str.a+='<li><input type=checkbox value =' + i + ' onchange="check(this,obj,data)" name='+data[i].id+'>' + data[i].label + '</li>';} //jak vypadá nevybraný checkboxu
else {str.b+='<li><input type=checkbox onchange="check(this,obj,data)" name='+data[i].id+' value = '+ i + ' checked="checked">' + data[i].label + '</li>'} //jak vypadá zaškrtnutý checkbox
} 
obj.a.innerHTML = str.a; 
obj.b.innerHTML = str.b;
} 
write(obj,data);
 
      
</script>
noris
Profil
Tak jsem vyřešil to přidávání a odebírání do jsonu.
K nezaškrtnutému checkboxu jsem přidal volání funkce add a k zaškrtnutému volám funkci remove.

str.a+='<li><input type=checkbox value =' + i + ' onchange="add(this);check(this,obj,data)" name='+data[i].id+'>' + data[i].label + '</li>';
str.b+='<li><input type=checkbox value = '+ i + ' onchange="rem(this);check(this,obj,data)" name='+data[i].id+' checked="checked">' + data[i].label + '</li>'

//funkce
function rem(chbox,data) 
{
var selected = chbox.getAttribute("name");
var position = pchecked.indexOf(selected);
pchecked.splice(position,1);
$.ajax({
                url: 'result.php',
                data: pchecked,
                type: "POST",
                success: function() {
                $( "#listresult" ).html(pchecked);
                },
            });
}

function add(chbox,data)
{
var selected = chbox.getAttribute("name"); 
pchecked.push(selected);
$.ajax({
                url: 'result.php',
                data: pchecked,
                type: "POST",
                success: function() {
                $( "#listresult" ).html(pchecked);
                },
            });
}
A umožnit opakování funkce pro různé vstupy půjde zabstrakněním funkce, na tom zapracuji a pokud přijdu na řešení hodím vám ho sem ;)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: