onClick nu se declanșează cu o singură intrare când apăsați pe Enter

Am probleme cu evenimentele din Internet Explorer 7.

Când am un formular cu două sau mai multe introduceți [type = text] și apăs pe Enter, evenimentele apar în această ordine:

  1. butonul trimite ( onClick )
  2. forma ( onSubmit )

Cod simplu:

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>

If I have only one input[type=text] and I press enter the submit button onClick event doesn't fire. Cod simplu:

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>
0
fr hi bn
adăugat autor lawnsea, sursa

6 răspunsuri

If you want code to run when the user presses enter, just use the onSubmit handler.

Dacă doriți să rulați codul atunci când utilizatorul apasă butonul și nu atunci când utilizatorul apasă tasta, utilizați un alt buton decât tipul = "trimiteți".

0
adăugat

Din curiozitate, folosiți un DOCTYPE și, dacă da, care dintre ele? Nu spun că problema este incompatibilă cu DOCTYPE, dar modul quirks este ceva de eliminat înainte de a încerca altceva.

0
adăugat

Din zorii browserelor, un singur câmp de intrare într-o formă s-ar prezenta la intrare cu sau fără un buton de trimitere. Acest lucru a fost mai simplu pentru ca oamenii să caute un site dintr-un singur câmp de căutare.

Dacă aveți nevoie să executați un JavaScript într-o formă, este mai sigur să utilizați formatul (și return false pentru a opri depunerea), mai degrabă decât să executați scriptul în butonul onClick al trimiterii. Dacă trebuie să executați JavaScript dintr-un buton, folosiți tipul = "buton" în loc de tip = "trimiteți" - sperăm că acest lucru a clarificat ce vreau să spun

0
adăugat
Nu am scăpat, dar am probleme cu parsarea ultimei propoziții. ("nu faceți niciodată nimic peClick de la un buton de trimitere, dar întotdeauna faceți-l în ... un buton onClick" ???)
adăugat autor Tim Pietzcker, sursa
De ce aș fi votat în sus și în jos pe acest comentariu ???
adăugat autor mplungjan, sursa

Butonul onclick ar trebui (cred) să se declanșeze doar dacă butonul este efectiv clic (sau când focalizarea este pe el și utilizatorul face clic pe enter), cu excepția cazului în care ați adăugat logica pentru a schimba acest lucru.

Este adăugarea casetei de text suplimentare, eventual, schimbarea ordinii filelor elementelor dvs. (poate, de exemplu, transformarea butonului în modul implicit)?

0
adăugat

Interesant este faptul că dacă faceți clic pe ecran (eliminați focalizarea din caseta de text) pe al doilea exemplu, cu doar o casetă de text, evenimentul onClick se declanșează ... Deci nu este un comportament așteptat, deoarece apare numai atunci când aveți doar o casetă text și se concentrează pe caseta de text Mă tem că ați găsit un bug în browser și va trebui să găsiți o soluție sau să evitați utilizarea evenimentului onClick în acest caz.
Folosesc evenimentul onSubmit pentru validări, deoarece este un eveniment "mai sigur", care este mai probabil să lucreze în diferite browsere și situații.

0
adăugat

S-ar putea să doriți să includeți un element de intrare ascuns ascuns pentru a recrea situația în care aveați două elemente de intrare ... în acest fel veți obține ambele evenimente trase

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input TYPE="text">
    <input type="hidden" name="dummy">
    <input TYPE="submit" onClick="{alert('buttom::onClick');}">
</form>

IE are o mulțime de soluții confuze care trebuie făcute pentru îmbunătățirea compatibilității codului nostru

0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com