| 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: 12 let
|
|||
0