Autor Zpráva
Petr Bartošek
Profil *
Dobrý den,
už tři dny nemohu přijít na to, proč mi nefunguje následující script v javascriptu. Jde o pouhé různé spuštění funkce. Nevíte někdo prosím, v čem je potíž.
Mám formulář, do kterého napíši odpověď dle otázky. Na vedlejší pokud zmáčknu tlačítko odeslat spustí se funkce otestuj() a vše dopadne v pořádku, inkrementují se globální proměnné, naskočí nová otázka, atd. pořád dokola.

Je však nepříjemné při opakovaném psaní pořád potvrzovat formulář myší. Proto jsem se rozhodl, že funkci otestuj() budu volat i po zmáčknutí klávesy "Enter".

Napsal jsem tedy:

function enter()
{
var ekc = event.keyCode;
if(ekc==13)
{
otestuj();
}
}
_es
Profil
Petr Bartošek:
Nefunkční event.keyCode ve Firefoxu
Petr Bartošek
Profil *
Dobrý den,
už tři dny nemohu přijít na to, proč mi nefunguje následující kód v javascriptu. Jde o pouhé různé způsoby spuštění funkce.
Mám formulář, do kterého napíši odpověď dle otázky. Pokud zmáčknu tlačítko odeslat spustí se funkce otestuj() a vše dopadne v pořádku, inkrementují se globální proměnné, naskočí nová otázka z pole otázek, atd. pořád dokola.

Je však nepříjemné při opakovaném psaní pořád potvrzovat formulář myší. Proto jsem se rozhodl, že funkci otestuj() budu volat i po zmáčknutí klávesy "Enter".


Napsal jsem tedy:


function enter()
{
var ekc = event.keyCode;
if(ekc==13)
{
otestuj();
}
}

formulář pak vypadá následovně
<form>
<input type="text" onkeydown="enter()">
</form>

K mému překvapení, však takto script po zmáčknutí entru nefunguje správně, proměnné se neinkrementují, formulářová otázka zůstane pořád stejná (pořád ta první z pole otázek).
Ještě upřesnění, na chvíli problikne další otázka z pole, ale hned se vrátí ta první.
Nevěděl byste prosím někdo v čem může být chyba. Já už zkoušel upravit všechno. Pokud událost - funkci otestuj() odpálím nějak jinak, než přes enter, tak to funguje správně. Pokud však spustím funkci otestuj() přes umáčknutí entru, tak se script bohužel správně nechová.
Díky moc za každou radu.
Zdraví Petr
_es
Profil
Petr Bartošek:
už tři dny nemohu přijít...
A prečítal si si vôbec to odkazované vlákno? Treba na to oveľa menej času, než tri dni.
Chamurappi
Profil
Reaguji na Petra Bartoška:
Proč zpracováváš klávesnici a ne událost onsubmit na formuláři, která se enterem běžně vyvolává? Tlačítku na odeslání dáš type="submit" a nemusíš řešit jeho onclick, protože jeho stisk také vyvolá formulářový onsubmit. Proč to komplikovat?
Petr Bartošek
Profil *
Chamurappi:
Děkuji za dobrou poznámku.
1. Udělal jsem to tak, protože ve finále bych byl rád bez toho tlačítka. Tak mě napadá, že bych ho mohl třeba nějak schovat. Co myslíte?
2. S javascriptem začínám, tak jsem chtěl tomu problému přijít na kloub, abych věděl, proč se tak děje.

Moc děkuji za případnou reakci.
Chamurappi
Profil
Reaguji na Petra Bartoška:
Klávesa enter vyvolává onsubmit formuláře i v případě, že neexistuje žádné odesílací tlačítko.
Petr Bartošek
Profil *
Chamurappi, Chamurappi:
Děkuji, vyzkouším to.
Nevíte proč mi nefunguje script vizte výše?
Chamurappi
Profil
Reaguji na Petra Bartoška:
Nevíte proč mi nefunguje script vizte výše?
Víme, viz výše.
Petr Bartošek
Profil *
Chamurappi:

Tak jsem to právě vyzkoušel a bohužel to tak nefunguje. Stejný problém jako když protáhnu otestuj() přes funkci enter(). Zase se na chvíli objeví druhá otázka z pole, ale hned se vrátí první. Přijde mi, že je problém někde v tom fyzickém zmáčknutí klávesy enter. Tápu ale. Neměl by tam být žádný zádrhel, ale nefunguje to.
Chamurappi
Profil
Reaguji na Petra Bartoška:
Výchozí chování (tedy odeslání stránky) musíš zastavit tím, že funkce v onsubmit vrátí false.
<form onsubmit="otestuj(); return false;">
Petr Bartošek
Profil *
Petr Bartošek:
Já jenom spustím fungující funkci otestuj(), pomocí jiné jednoduché funkce enter() a příp. jiné události a kód pak nepracuje správně. Nemůže být problém v oboru proměnných nebo tak něco. Každou proměnou ale definuji pomocí var, hned na prvních řádcích kódu.


Aha, tak teď už to běží správně moc díky za radu. Tzn., že stejný zádrhel byl i v mém původním problému. Entrem jsem vždycky znovu načetl stránku? Je to tak?
Chamurappi
Profil
Reaguji na Petra Bartoška:
stejný zádrhel byl i v mém původním problému. Entrem jsem vždycky znovu načetl stránku?
Pravděpodobně ano. Krom toho, že nefungoval v Mozille z důvodu, na který jsme tě už párkrát odkázali.
Petr Bartošek
Profil *
Chamurappi:
Tak snad ano. Vůbec nevím jak se mi tam dostal ten nadpis ohledně Mozilly, testuji zatím v Chromu. Za to se omlouvám, neznám ještě dobře všechny funkcionality tohoto fóra. I tak děkuji. Zdraví Petr
Chamurappi
Profil
Reaguji na Petra Bartoška:
Příspěvek [#2] napsal _es, poslal ti odkaz (to je to modré) vedoucí na diskusi se souvisejícím problémem. Není to nadpis tohoto dotazu, nepsal jsi ho ty.
Petr Bartošek
Profil *
Chamurappi:
Dobrý den,
jak prosím profíci řeší následující problém?

Uložím např. img tag do proměnné řetězec:

var retezec = " <img src='pic/obrazek.png' onmouseover='this.src=\'pic/obrazek2.png\' '>";

Následně, když nechám proměnnou retezec někde vypsat jako obsah elementu, tak mi už nefunguje událost onmouseover. Asi bude problém někde se sekvencí escape a 3. úrovni apostrofů.
Tuším, že takto jednoduchý příklad by se dal asi nějak pospojovat pomocí operátoru +, jde mi ale o případy, když do nějakého elementu potřebuji přes určitou událost dostat hodně nového kódu (html, php, javascript).
Poradíte prosím?
Děkuji.
Zdraví Petr
_es
Profil
Petr Bartošek:
Na nový dotaz je vhodné založiť nové vlákno.
V tom reťazci je ' to isté ako \', preto je zápis atribútu onmouseover nesprávny. Na vloženie apostrofu alebo úvodzovky treba použiť buď HTML znakové entity, alebo vložíš úvodzovky (") pomocou \".
Petr Bartošek
Profil *
_es:
Děkuji moc.
\" funguje
\' nefunguje, já měl za to, že se jedná o stejný zápis.
Zdraví Petr
_es
Profil
Petr Bartošek:
\' nefunguje, já měl za to, že se jedná o stejný zápis.
Skús sa zamyslieť, kde začína a kde končí hodnota atribútu onmouseover.

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: