Нажатие «enter» не публикует форму в IE8 - PullRequest
8 голосов
/ 08 июня 2009

Я использую 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, форма не отправляется, и пользователь вынужден нажать кнопку отправки.

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

Ответы [ 7 ]

13 голосов
/ 22 сентября 2009

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

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

Более подробная информация и обходной путь здесь: http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

7 голосов
/ 07 января 2011

Имитация клика

Вот как я это делаю в 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();
4 голосов
/ 08 июня 2009

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

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

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

Edit:

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

3 голосов
/ 08 июня 2009

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

2 голосов
/ 08 июня 2009

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

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

$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
    }
}
1 голос
/ 18 сентября 2009

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

1 голос
/ 08 июня 2009

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

...