Autor | Zpráva | ||
---|---|---|---|
sniclman Profil * |
#1 · Zasláno: 27. 9. 2012, 08:26:04
Dobrý den,
mám javascript na vytvoření tabulky s dvěma tlačítky, které pak vykonávají různé funkce. function addForm(object){ newTable = document.createElement("table"); newTable.style.width="600px"; newTable.border=1; newTr = document.createElement("tr"); newTable.appendChild(newTr); functions = new Array(addFormRow, delForm); values = new Array("Přidat hodnotu", "Smazat tabulku"); for(x in functions){ var newTd = document.createElement("td"); newTr.appendChild(newTd); var newInput = document.createElement("input"); newInput.type="button"; newInput.value=values[x]; newInput.onclick = function(){return functions[x](this);}; newTd.appendChild(newInput); } object.parentNode.insertBefore(newTable, object);} function addFormRow(){alert('add');} function delForm(){alert('delete');} <input type="button" value="Přidat volitelný formulář" onClick="addForm(this);"> potřeboval bych aby dvě tlačítka v tabulce měly na onClick funkce addFormRow(this) a delForm(this) Problém je, že obě tlačítka dostanou funkci, která je v řetězci funkcí jako poslední delForm(this). Můžete mi prosím poradit kde je chyba. |
||
Chamurappi Profil |
#2 · Zasláno: 27. 9. 2012, 10:13:04
Reaguji na sniclmana:
„newTable.appendChild(newTr);“ To ti funguje ve všech prohlížečích? Nebylo by lepší používat insertRow ?
„for(x in functions){“ Smyčka for -in se nehodí na procházení cyklů.
Také bys mohl používat var .
„newInput.onclick = function(){return functions[x](this);};“ Hodnota x v okamžiku zavolání funkce není stejná, jako byla v době jejího vzniku. Viz Lexikální uzávěr.
|
||
sniclman Profil * |
#3 · Zasláno: 27. 9. 2012, 10:21:59
Chamurappi:
Děkuji za dodatečné rady. Nakonec jsem to vyřešil. newInput.onclick = new Function(functions[x]+"(this)"); |
||
Chamurappi Profil |
#4 · Zasláno: 27. 9. 2012, 10:26:43
Reaguji na sniclmana:
To je docela nápaditá příšernost. |
||
sniclman Profil * |
#5 · Zasláno: 27. 9. 2012, 10:47:35
Chamurappi:
Tak jsem se podíval na ty lexikální uzávěrky. Výsledek by mohl být relativně dobrý. (function(x){newInput.onclick = function(){return functions[x](this);};})(x); |
||
Radek9 Profil |
#6 · Zasláno: 27. 9. 2012, 10:52:19
sniclman:
Tohle ti v cyklu zbytečně vytváří vždy dvě nové funkce. Dej tu obalovací ven a uvnitř cyklu ji volej. |
||
sniclman Profil * |
#7 · Zasláno: 27. 9. 2012, 11:45:54 · Upravil/a: sniclman
Tak ještě jeden problém.
Funguje mi funkce pro přidávání ale nefunguje mi druhá funkce. Vůbec ji to nechce druhému inputu přiřadit. newTr = newTable.insertRow(1); functions = new Array(addFormRow, delForm); values = new Array("Přidat položku", "Smazat formulář"); for(x=0; x<=1; x++){ newTd = newTr.insertCell(x); newInput = document.createElement("input"); newInput.type="button"; newInput.value=values[x]; (function(x){newInput.onclick = function(){return functions[x](this);};})(x); newTd.appendChild(newInput);} Radek9: Nerozumím. Mohl bys uvést prosím příklad? sniclman: „Tak ještě jeden problém.“ Vyřešeno. |
||
Časová prodleva: 12 let
|
0