【问题标题】:In IE8 enter key in a form does not work在 IE8 中输入表单中的键不起作用
【发布时间】:2010-11-28 12:19:19
【问题描述】:

我有一个问题,在 IE8 中输入无法提交表单。我已经生成了一个测试页面来暴露这个问题。似乎在 onLoad 函数中显示表单会禁用 enter 按钮不再触发提交的结果。这是 IE8 中的错误还是一些安全问题?

重现这个的代码是:

onload = function() { 
    document.getElementById('test').style.display = 'block'; 
} 
#test {
    display: none;
}
<form id="test" method="get" action="javascript:alert('woei!')"> 
    <input type="text" name="user" value=""> 
    <input type="password" name="pw" value="">
    <input type="submit" value="submit" id="submit"> 
</form> 

【问题讨论】:

标签: forms internet-explorer-8 enter


【解决方案1】:

我找到了一个合适的解决方案,并希望与你们分享。

不要使用&lt;input type="submit...&gt;,而是使用&lt;button type="submit"...&gt;。 这将在其他浏览器(IE6-7、FF3)中完全相同。AND 在 IE8 中有效。 :)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<style type="text/css">
#test {
    display: none;
} 
</style> 
<script type="text/javascript"> 
onload = function() { 
    document.getElementById('test').style.display = 'block'; 
};
</script> 
</head> 
<body> 
<form id="test" method="get" action="javascript:alert('woei!')"> 
    <input type="text" name="user" value="" /> 
    <input type="password" name="pw" value="" />
    <button type="submit" value="submit" id="submit"></button>
</form> 
</body> 
</html>

【讨论】:

  • 我在 IE 8 中没有看到这个工作。我仍然在另一端得到“null”值。假设“null”意味着他们在 IE 8 或 9 中点击了“ENTER”,那么只测试“if(submit == "submit" || submit == null)”会更容易。
【解决方案2】:
$("form input").keypress(function (e) {
   if(e.which === 13) {
      $("form").submit();
   }
});

以上是正确的解决方法。参考:IE Not submitting my form on enter press of enter key?

【讨论】:

  • 为我做的,可能不是最好的解决方案,但它有效,做得好,+1
【解决方案3】:

我认为一切都比你想象的要复杂得多......

当表单的显示值设置为none 时使用css 类或仅在页面初始时使用样式属性,仅当您有多个具有文本类型的输入字段时,在文本字段中按回车键不起作用。 .. 如果您有一个文本字段,它可以正常工作.. 如果您有多个,它不会触发表单提交...

这里我做了一个演示...

工作正常(正常形式) http://yasinergul.com/stackoverflow/ie8-enter-key-bug/one.html

工作正常(表单隐藏并设置为可见,但只有一个文本输入) http://yasinergul.com/stackoverflow/ie8-enter-key-bug/two.html

不起作用(表单隐藏并设置为可见,但它有两个文本输入) http://yasinergul.com/stackoverflow/ie8-enter-key-bug/three.html

我认为最好的方法是给对象一个 .hidden 类,但不为这个 css 选择器设置 display:none。你可以用jquery把它隐藏起来

$(".hidden").hide();

当页面加载时,表单会显示几毫秒,但在 jquery 工作后会隐藏...

【讨论】:

【解决方案4】:

我不能确切地说这是否是一个错误,但我可以确认您报告的行为在 IE 8 中发生了变化......我想这可能是一个错误,而不是故意的改变。

如果表单设置为 CSS display:none,则默认提交按钮行为不起作用。

其他浏览器,包括IE 7(甚至是使用IE 7标准兼容模式的IE 8)都没有问题。

我自己通过使用 height:0px; 解决了这个问题。在 CSS 中,然后在我想显示表单时让 javascript 设置适当的高度。改用高度,默认的输入键提交行为似乎正常工作。

【讨论】:

    【解决方案5】:

    旧票,但我想补充一下我认为的解释:

    IE8 做了以下奇特的事情:Enter 键会提交表单,但是任何

    <input type="submit" name="MySubmitButton" value="I hope I detect THIS VALUE in POST" />
    

    不会在 POST 中发送。

    IE9 改变行为并发送值。据我的测试显示,Chrome 总是发送值。

    我希望这会有所帮助...

    【讨论】:

      【解决方案6】:

      对于遇到此问题的任何未来用户:

      对我有用的是添加 DOCTYPE:

      &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

      【讨论】:

        【解决方案7】:

        修复了@Jitendra Pancholi 的建议——现在它只提交我们想要的表单,而不是所有表单

        $("form input").keypress(function (e) {
           if(e.which === 13) {
              $(this.form).submit();
           }
        });
        

        【讨论】:

          【解决方案8】:

          我在 IE8 中尝试过,它对我有用。不过,您必须确保表单的该部分具有焦点。

          Javascript 有一个焦点函数,如果需要,您可以使用它来设置焦点。

          var textbox = document.getElementById("whatever name input box's id will be");
          if(textbox) textbox.focus();
          

          【讨论】:

          • 是的,由于某些奇怪的原因,当我将它作为本地文件打开时,我无法选择是否使用兼容性并且它可以工作。我输入了 IIS,然后它让我选择不兼容我们,我看到了你描述的行为。诡异的 。 . .
          【解决方案9】:

          您可能希望在输入框中添加一个 onkeyup 事件,这样如果您在输入框中按回车,它也会提交。

          正如 CodePartizan 所提到的,否则您需要将焦点放在按钮上,所以如果您切换到按钮或单击它,它似乎也对我有用。

          【讨论】:

            【解决方案10】:

            我相信 Yasin 明白了这一点。 我只是遇到了同样的问题:表单中的多个文本字段的可见性是“隐藏的”。 我的解决方法(防止表单闪烁)是在 css 中将表单不透明度设置为 0,然后在文档就绪时使用 jQuery 自定义其样式设置。

            我相信这不是 JS 可以解决的问题。

            【讨论】:

              【解决方案11】:

              是的,我今天也被这个虫子咬了。不过,我找到了这个解决方法(与 OP 不同):

               <script type="text/javascript"> 
               onload = function() { 
                   document.getElementById('test').style.display = 'block'; 
              +    document.getElementById('test').innerHTML =
              +        document.getElementById('test').innerHTML;
               } 
               </script> 
               </head>
              

              只需从表单本身的内容重新创建表单的内容。哎呀。但它有效。 (著名的遗言……)

              【讨论】:

                【解决方案12】:

                这在 IE8 中适用于我。我在只使用一个输入字段时遇到了这个问题。

                阅读更多:http://www.rachaelarnold.com/dev/archive/enter-key-form-submission-bug#ixzz2Y5Zwgj2k

                【讨论】:

                • 请注意,不鼓励仅链接的答案,因此答案应该是搜索解决方案的终点(相对于另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
                【解决方案13】:

                我在 ie 上遇到了同样的问题,但在我读到这篇文章之前,没有任何解决方案有帮助:

                http://www.rachaelarnold.com/dev/archive/enter-key-form-submission-bug#ixzz2Y5Zwgj2k

                我的表单只有一个输入字段....呵呵! :)

                【讨论】:

                  【解决方案14】:

                  找到一个可行的解决方案。

                  使提交按钮不可见,而不是使用 display:none;

                  input#submit {
                  color: transparent;
                  background: transparent;
                  border: 0px;
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-04-08
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-12-06
                    • 2015-05-03
                    相关资源
                    最近更新 更多