Autor Zpráva
nothrem
Profil
Potřebuju udělat, aby se pomocí Enter přecházelo na další prvek a formulář se odeslal až teprve když je enter stisknut nad tlačítkem. Po několika pokusech a omylech jsem došel k tomuhle:
<html>

<head>

<script type="text/javascript" language="JavaScript">
<!--
var nextComponent = 'ia';

function catchEnter(evt)
{
e = (evt)?evt:document.event;
if(!e) var e=window.event;
k=e.charCode?e.charCode:e.keyCode?e.keyCode:e.which;
if (k == 13)
{
if (nextComponent == 'send')
{
form.submit;
return false;
} else
{
document.getElementById(nextComponent).focus();
return false;
}
}
}

document.onkeydown=catchEnter
//-->
</script>

</head>
<body>

<div id="IdKolekce">
<form method="get">
1: <input type="text" name="1" id="ia" onfocus="nextComponent = 'ib';" />
2: <input type="text" name="2" id="ib" onfocus="nextComponent = 'ic';" />
3: <input type="text" name="3" id="ic" onfocus="nextComponent = 'id';" />
4: <input type="text" name="4" id="id" onfocus="nextComponent = 'bt';" />
<input type="submit" name="t" id="bt" value="Odeslat" onfocus = "nextComponent = 'send';">
<script type="text/javascript" language="JavaScript">
<!--
document.getElementById(nextComponent).focus();
//-->
</script>
</form>
<a href="?">reset</a>
</div>

</body>
</html>

Problém je v tom, že to 100% funguje jen v IE, ale Opera po tom, co přepne focus na další prvek zároveň formulář odešle (ignorujíc return false). Potřeboval bych poradit, jak to udělat, aby to fungovalo právě v Opeře (na IE, FF, ... mi nezáleží).

Díky za každou pomoc.

PS: poběží to na lokální 100mbit síti s Operou, takže je jedno jaká bude podpora prohlížečů nebo jestli se bude přenášet nadbytečné množství dat. Jen to musí jít 100% v Opeře 8.5+
Oswald
Profil
Navěsil bych to spíš na onsubmit. Ani se nedivím, že vrácení false na keydown nezabrání odeslání formuláře, protože to je úplně jiná údálost než submit (byť je ten submit třeba následně vyvolán).
peta
Profil *
nothrem
na prepinani prvku slouzi tabelator a tab-index , kdyz vymyslis nesmysly, dobre ti tak.

Do form bych dal podminku onsubmit="return nextComponent"
nextComponent=0 kdyz se nema odeslat, 1, kdyz ma.

0=false=""
1=true="dsaf"=535,636,63,6 (cokoli jineho nez 0,false,"")
peta
Profil *
jo, koukam na script, asi to budes chtit spis obrazene, s vykricnikem...
onsubmit="return !nextComponent"
nothrem
Profil
Asi sem něco přehlíd nebo nepochopil, ale nezávisle na tom, jestli dám onsubmit="return false" nebo onsubmit="return true", tak se to stejně odešle (IE i Opera).

To Peta "na prepinani prvku slouzi tabelator a tab-index": To je pravda, ale to platí na technické uspořádání prvků, zatímco enter by měl sloužit pro logické přecházení mezi prvky. Proto třeba v excelu tab skáče doprava, zatímco u enteru si můžeš nastavit kam skáče, protože třeba čekáš, že budeš vyplňovat pole pod sebou.
"kdyz vymyslis nesmysly..." nevymýšlím si to já, ale řekne ti to kterýkoliv zákazník, který si objedná aplikaci ve které se do polí vyplňují čísla: "když píšu na numerické čísla nemám čas mačkat tab na druhé straně klávesnice..."
nothrem
Profil
Už mi došlo co sem dělal špatně - dával sem onsubmit na tlačítko místo formuláře :x

Teď už to jakž takž funguje - ale v opeře to dělá to, že po stisku enteru na posledním inputu to očekávaně přeskočí na tlačítko, do nextComponent se uloží, že se může odeslat, ale pak se to ihned odešle (zatímco IE čeká na další stisk enteru) - opět proto, že opera ignoruje return false při onkeydown :(
peta
Profil *
nothrem toz, poradi prvku pro tabelator se nastavuje tabindexem. Takze tvoje logika poradi podle dokumentu muze byt jina nez nastavena tabindexy.

Jinak mi teda prijde zbytecne davat akce onkeydown, kdyz stejny ucel plni onchange
Toto téma je uzamčeno. Odpověď nelze zaslat.

0