点击“输入”不会在IE8中发布表单

时间:2009-06-08 12:42:18

标签: php html forms submit form-submit

我正在使用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 个答案:

答案 0 :(得分:13)

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

我已经学会了如果你的表单在页面加载时display:none的困难,即使你稍后用Javascript显示它,IE8仍然不会在输入时提交。 但是,如果它没有在页面加载时隐藏,并且您之后将其设置为display:none,就像onDOMReady一样,那么它可以工作! WTF

更多详情和解决方法:http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

答案 1 :(得分: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();

答案 2 :(得分:4)

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

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

IE anomaly when using the enter key to submit a form

编辑:

这已被删除,但另一个link再次覆盖(页面底部)defined it and explaining the bug in IE Blog on December 18th 2008

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

编辑: 根据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>';

编辑2: 您的HTML有效。 试试this

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
    }
}

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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