Autor Zpráva
joe
Profil
Ahoj,

mohl by mi někdo vysvětlit, proč bych neměl používat kód
<input type="submit" name="submit" />
Setkal jsem se s tím teď poprvé, kdy mi Nette framework kvůli tomu "submit" jako jméno vyhodí Exception, prý z nějakých limitů v JavaScriptu - z jakých tedy, nevím jak to najít?

Díky
Měsíček
Profil
Dobrá otázka .. nehraje v tom roli třeba tato funkce addEventListener()? Když přejímá místo události onSubmit pouze "submit"?
habendorf
Profil
Submit je klíčové slovo JS.
habendorf
Profil
viz třeba http://www.w3schools.com/HTMLDOM/met_form_submit.asp
joe
Profil
habendorf
No i když je (nenašel jsem to, nevím pod čím přesně to najít, pokaždý mi to vyhodí plno stránek s inputem submit a nějakým kusem JS), tak co to má společného s JavaScriptem? To jméno je zadané v HTML...

EDIT: už vidím odkaz:-)
Chamurappi
Profil
Reaguji na habendorfa:
Není to přímo klíčové slovo, jen je v tomto případě v kolizi element se stejnojmennou metodou.
joe
Profil
habendorf
No dobře, tak je to funkce na odeslání formuláře, ale nechápu jak by se to s tím mohlo zaměnit. To je jako kdyby někdo říkal, že input nemůže být typu "submit", protože submit je klíčové slovo v JS... Nějak nechápu jak to s tím souvisí, jméno submit pro odesílací tlačítko se celkem často používá - a i já to používám a nikdy jsem neměl problém.
Chamurappi
Profil
Reaguji na joa:
Reference na formulářové prvky se navěšují na objekt formuláře. Když máš třeba <input name="joe">, tak k němu můžeš přistupovat přes „formulář.joe“.
joe
Profil
Chamurappi
Dobře, ale to mi nezakazuje použít pro jméno prvku "submit", protože následující kód funguje normálně.
<form onsubmit="alert(this.submit.value); return false">
<input name="submit" type="submit" value="Send">
</form>
Pro odeslání tam chybí ()
Chamurappi
Profil
Reaguji na joa:
Ano, funguje, ale kdybys chtěl tento formulář odeslat metodou submit(), nemáš už šanci, protože this.submit je ten <input>. Proto zřejmě Nette preventivně prská.

Pro odeslání tam chybí ()
To přeci nehraje roli. Proměnná formulář.submit obsahuje běžně nativní funkci prohlížeče, která se — pokud se volá — píše se závorkami. A tvůj <input> ji přeplácne.
joe
Profil
Chamurappi
kdybys chtěl tento formulář odeslat metodou submit(), nemáš už šanci
Ale mám, stačí to upravit na
this.submit(); return false
kdy dojde k zavolání funkce.

To přeci nehraje roli.
Hraje, protože pokud nenapíšu závvorky () bude se jednat o prvek a pokud závorky použiju, jedná se o funkci k odeslání formuláře... Proto pokud upravím onsubmit na hodnotu viz. výš, tak vše fungovat bude.
Chamurappi
Profil
Reaguji na joa:
Špatně testuješ. Volání this.submit() vyvolá chybu (protože this.submit je opravdu <input> a ne funkce), takže se neprovede „return false“ a formulář se odešle.

Hraje, protože pokud nenapíšu závvorky () bude se jednat o prvek a pokud závorky použiju, jedná se o funkci
Závorky nikdy nemůžou ovlivňovat význam toho, za čím stojí. Metody a vlastnosti objektů sdílí ten samý prostor názvů.
joe
Profil
Chamurappi
Chyba, tak to mi nedošlo. Už vim, že nemá cenu se "hádat" s takovým odborníkem na JS, díky za vysvětlení.
Chamurappi
Profil
Reaguji na joa:
Klidně se hádej, v #11 jsi nalíčil vynikající chyták a mé chápání JavaScriptu se na pár minut otřáslo v základech, než mi docvaklo, v čem je háček :-)
Děkuji.
joe
Profil
Chamurappi
Já se snažim nikdy nehádat a říkat jenom pravdu, v tomhle mě JS zradil, nemám rád JS, už třeba kvůli tomuhle případu jak jsem napsal, kdyby se zastavil a ukázal chybu, to by bylo něco jinýho... :-)

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0