Autor | Zpráva | ||
---|---|---|---|
Petr Bartošek Profil * |
#1 · Zasláno: 15. 11. 2013, 11:05:29
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 |
#2 · Zasláno: 15. 11. 2013, 11:13:41
Petr Bartošek:
Nefunkční event.keyCode ve Firefoxu |
||
Petr Bartošek Profil * |
#3 · Zasláno: 15. 11. 2013, 11:17:48
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 |
#4 · Zasláno: 15. 11. 2013, 11:21:23
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 |
#5 · Zasláno: 15. 11. 2013, 11:27:56
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 * |
#6 · Zasláno: 15. 11. 2013, 12:07:42
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 |
#7 · Zasláno: 15. 11. 2013, 12:58:22
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 * |
#8 · Zasláno: 15. 11. 2013, 13:19:42
Chamurappi, Chamurappi:
Děkuji, vyzkouším to. Nevíte proč mi nefunguje script vizte výše? |
||
Chamurappi Profil |
#9 · Zasláno: 15. 11. 2013, 13:26:47
|
||
Petr Bartošek Profil * |
#10 · Zasláno: 15. 11. 2013, 13:27:12
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 |
#11 · Zasláno: 15. 11. 2013, 13:29:33
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 * |
#12 · Zasláno: 15. 11. 2013, 13:30:07 · Upravil/a: Petr Bartošek
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 * |
#14 · Zasláno: 15. 11. 2013, 13:54:40
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 |
#15 · Zasláno: 15. 11. 2013, 14:08:47
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 * |
#16 · Zasláno: 16. 11. 2013, 12:03:31
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 |
#17 · Zasláno: 16. 11. 2013, 12:17:05
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 * |
#18 · Zasláno: 16. 11. 2013, 12:26:28
_es:
Děkuji moc. \" funguje \' nefunguje, já měl za to, že se jedná o stejný zápis. Zdraví Petr |
||
_es Profil |
#19 · Zasláno: 16. 11. 2013, 13:59:12
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 .
|
||
Časová prodleva: 10 let
|
0