8

我在需要时使用 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 中点击 enter 时,表单没有提交,并且用户被迫点击提交按钮。

我该如何纠正这个问题?

4

7 回答 7

13

还要注意这个有趣的错误:

我已经了解到,如果您的表单display:none处于页面加载状态,即使您稍后使用 Javascript 显示它,IE8 仍然不会在输入时提交。但是,如果它在页面加载时没有隐藏,并且您将其设置为display:noneafter,例如 onDOMReady,那么它可以工作!跆拳道

更多细节和解决方法在这里:http ://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

于 2009-09-22T16:30:25.320 回答
7

模拟点击

这是我在 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();
于 2011-01-07T18:41:41.490 回答
4

这是 Microsoft 中的一个链接,它可能会为您提供一些启示。

快速阅读链接实际上可能被认为是通过 Enter 键提交表单的错误,我认为 Microsoft 会为 IE8 修复该错误。

IE 使用回车键提交表单时出现异常

编辑:

这现在已被删除,但另一个链接再次覆盖它(页面底部),它定义了它并解释了 2008 年 12 月 18 日 IE 博客中的错误

于 2009-06-08T13:25:53.287 回答
3

您是否有一个刚刚从您的代码片段中省略的打开表单标签?

于 2009-06-08T13:03:17.920 回答
2

如果这是一个真正的问题并且您找不到其他解决方案,您可以随时onkeypress为表单执行事件并检查是否按下了Enter键。

编辑:根据机器的回答,这是正确的代码:

$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
    }
}
于 2009-06-08T12:57:17.167 回答
1

我也能够通过动作和方法重现这一点。去掉页面上的所有其他代码,它仍然会生成。但是,我已经看到表单在 IE8 中使用 action=""

于 2009-09-18T14:01:34.870 回答
1

HTML 规范要求元素上的action属性。form也许效果会更好。

于 2009-06-08T13:25:05.333 回答