Situatie schets
Ik heb een form (2 velden en een submit knop) die standaard op display:none staat en tijdens de onLoad op display:block wordt gezet. Verder niks spannends en werkt allemaal prima in FF3, IE6, IE7, chrome.
Het probleem
Echter, in IE8 levert dit het probleem dat de enter-toets in een textveld om de form te submitten niet meer werkt. De submit knop werkt wel als je erop klikt. Als ik IE8 in IE7 compatibility-mode draai werkt het wel.
Oorzaak
Na veel testen ben ik erachter gekomen dat het geheel wel werkt in IE8 als ik vanaf aanvang display:block heb staan en deze dus niet meer tijdens de onLoad wijzig.
Workaround
Ik heb inmiddels al een paar workarounds bedacht, maar vroeg me af of er geen betere is.
Edit:
Dit is de code om de situatie te reproduceren: De enter werkt dan niet meer (in IE8). Als #test css display none veranderd in block dan werkt ie dus wel.
Ik heb een form (2 velden en een submit knop) die standaard op display:none staat en tijdens de onLoad op display:block wordt gezet. Verder niks spannends en werkt allemaal prima in FF3, IE6, IE7, chrome.
Het probleem
Echter, in IE8 levert dit het probleem dat de enter-toets in een textveld om de form te submitten niet meer werkt. De submit knop werkt wel als je erop klikt. Als ik IE8 in IE7 compatibility-mode draai werkt het wel.
Oorzaak
Na veel testen ben ik erachter gekomen dat het geheel wel werkt in IE8 als ik vanaf aanvang display:block heb staan en deze dus niet meer tijdens de onLoad wijzig.
Workaround
Ik heb inmiddels al een paar workarounds bedacht, maar vroeg me af of er geen betere is.
- Een onkeydown aan elke textfield toevoegen en daarin de juiste functie aanroepen als enter. Heb dit nog niet getest maar denk dat ik dan 2 submit events binnen krijg (naast het feit dat ik het geen mooie oplossing vind om in al mijn forms dit soort wijzigingen toe te gaan voegen).
- Een <button> element toevoegen die in zijn onclick een submit uitvoert. Raar genoeg krijgt de button de focus en triggert een enter dus de actie van het button. Probleem is echter dat dit weer niet werkt in de andere browsers dus moet ik dit combineren met een submit knop, en om te voorkomen dat er 2 buttons zijn moet ik de <button> onzichtbaar maken voor de gebruiker. Dat is dan ook meteen probleem 2, want door display:none of visible:hidden op de button te gebruiken werkt de enter weer niet
.
- In de header de meta-tag opnemen om IE8 te forceren in IE7 compatibility mode te draaien, maar dat wil ik juist niet omdat dit dan geldt voor mijn hele pagina en ik wil wel compatible blijven met de nieuwste browsers.
Edit:
Dit is de code om de situatie te reproduceren: De enter werkt dan niet meer (in IE8). Als #test css display none veranderd in block dan werkt ie dus wel.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <style type="text/css"> #test { display: none; } </style> <script type="text/javascript"> onload = function() { document.getElementById('test').style.display = 'block'; } </script> </head> <body> <form id="test" method="get" action="javascript:alert('woei!')"> <input type="text" name="user" value=""> <input type="password" name="pw" value=""> <input type="submit" value="submit" id="submit"> </form> </body> </html> |
[ Voor 16% gewijzigd door Verwijderd op 15-09-2009 17:14 ]