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 |
#2 · Zasláno: 25. 2. 2014, 09:28:27
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 |
#3 · Zasláno: 25. 2. 2014, 14:27:22
_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 |
#4 · Zasláno: 25. 2. 2014, 15:18:58
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 |
#6 · Zasláno: 26. 2. 2014, 21:35:54
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); }, }); } |
||
Časová prodleva: 11 let
|
0