Нажатие «enter» не публикует форму в IE8

Я использую PHP для отправки формы входа, когда это необходимо, и вот код:

$htmlForm = '<form id="frmlogin">'.'<label>'; switch(LOGIN_METHOD) { case 'both': $htmlForm .= $ACL_LANG['USERNAME'].'/'.$ACL_LANG['EMAIL']; break; case 'email': $htmlForm .= $ACL_LANG['EMAIL']; break; default: $htmlForm .= $ACL_LANG['USERNAME']; break; } $htmlForm .= ':</label>'. '<input type="text" name="u" id="u" class="textfield" />'. '<label>'.$ACL_LANG['PASSWORD'].'</label>'. '<input type="password" name="p" id="p" class="textfield" />'. '<center><input type="submit" name="btn" id="btn" class="buttonfield" value="Sign in to extranet" /></center>'. '</form>'; return $htmlForm; 

Проблема в том, что когда пользователь попадает в IE8, форма не отправляется, и пользователь вынужден нажать кнопку отправки.

Как исправить это?

Если это реальная проблема, и вы не можете найти другое решение, вы всегда можете сделать событие onkeypress для формы и проверить, была ли нажата клавиша Enter .

EDIT: Вот правильный код в соответствии с ответом Machine:

 $htmlForm .= ':<form><label>'.$ACL_LANG['USERNAME'].'</label>'. '<input type="text" name="u" id="u" class="textfield" />'. '<label>'.$ACL_LANG['PASSWORD'].'</label>'. '<input type="password" name="p" id="p" class="textfield" />'. '<center><input type="submit" name="btn" id="btn" class="buttonfield" value="Sign in to extranet" /></center>'. '</form>'; 

EDIT 2: ваш HTML-код действителен. Попробуйте следующее :

 function checkEnter(e) { //e is event object passed from function invocation var characterCode //literal character code will be stored in this variable if (e && e.which) { //if which property of event object is supported (NN4) e = e characterCode = e.which //character code is contained in NN4's which property } else { e = event characterCode = e.keyCode //character code is contained in IE's keyCode property } if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key) document.forms[0].submit() //submit the form return false } else { return true } } 

Также следите за этой забавной забавной ошибкой:

Я усердно изучил, что если ваша форма display:none на загрузке страницы, даже если вы покажете ее позже с помощью Javascript, IE8 все равно не будет отправляться на ввод. Однако, если он не скрыт при загрузке страницы, и вы установите его для display:none после, как onDOMReady, тогда он работает! WTF

Подробнее и обходной путь здесь: http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

Имитировать клик

Вот как я это делаю в jQuery.

 // Recreating normal browser behavior in Javascript. Thank you, Microsoft. jQuery.fn.handle_enter_keypress = function() { if ($.browser.msie){ $(this).find('input').keypress(function(e){ // If the key pressed was enter if (e.which == '13') { $(this).closest('form') .find('button[type=submit],input[type=submit]') .filter(':first').click(); } }); } } $('form').handle_enter_keypress(); 

Вот ссылка в Microsoft, которая может пролить свет на вас.

Если вы быстро прочитаете ссылку, это может считаться ошибкой, представляющей форму с помощью ключа ввода, который, как я полагаю, был бы исправлен Microsoft для IE8.

IE аномалия при использовании клавиши ввода для отправки формы

Редактировать:

Теперь это было удалено, но еще одна ссылка, в которой он был снова (внизу страницы), который определил его и объяснил ошибку в блоге IE 18 декабря 2008 года .

У вас есть тег формы открытия, который был просто опущен из фрагмента кода?

Атрибут action в элементе form требуется спецификацией HTML. Может быть, это сработает лучше.

Я смог воспроизвести это также с помощью действия и метода. Извлеките все остальные коды на странице, и он все равно будет выпущен. Тем не менее, я видел, что формы работают в IE8 с действием = ""