Нажатие “enter” не отправляет форму в IE8
-
12-09-2019 - |
Вопрос
Я использую 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;
Проблема в том, что когда пользователь нажимает enter в IE8, форма не отправляется, и пользователь вынужден нажать кнопку отправки.
Как мне это исправить?
Решение
Если это реальная проблема, и вы не можете найти другого решения, вы всегда можете сделать onkeypress
событие для формы и проверьте, есть ли Войти клавиша была нажата.
Редактировать:Вот правильный код в соответствии с ответом Машины:
$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>';
ПРАВКА 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, тогда это работает!ВТФ
Более подробная информация и обходной путь здесь: 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 на это, которая может пролить для вас некоторый свет.
При быстром прочтении ссылки на самом деле это может считаться ошибкой отправки формы с помощью клавиши Enter, которая, я полагаю, была бы исправлена Microsoft для IE8.
Т.е. аномалия при использовании клавиши enter для отправки формы
Редактировать:
Теперь это было удалено, но другой Ссылка покрывая его снова (внизу страницы), который определил это и объяснил ошибку в IE Blog 18 декабря 2008.
Есть ли у вас открывающий тег формы, который был просто опущен из вашего фрагмента кода?
В action
атрибут на form
элемент требуется спецификацией HTML.Может быть, это сработает лучше.
Я также смог воспроизвести это с помощью действия и метода.Удалил весь остальной код на странице, и он все равно создается.Однако я видел, как формы работают в IE8 с action =""