在 IE8 中输入表单中的键不起作用
Posted
技术标签:
【中文标题】在 IE8 中输入表单中的键不起作用【英文标题】:In IE8 enter key in a form does not work 【发布时间】: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>
【问题讨论】:
+1 为清楚起见。最近很少见。 欺骗:***.com/questions/964734/… 【参考方案1】:我找到了一个合适的解决方案,并希望与你们分享。
不要使用<input type="submit...>
,而是使用<button type="submit"...>
。
这将在其他浏览器(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/***/ie8-enter-key-bug/one.html
工作正常(表单隐藏并设置为可见,但只有一个文本输入) http://yasinergul.com/***/ie8-enter-key-bug/two.html
不起作用(表单隐藏并设置为可见,但它有两个文本输入) http://yasinergul.com/***/ie8-enter-key-bug/three.html
我认为最好的方法是给对象一个 .hidden 类,但不为这个 css 选择器设置 display:none。你可以用jquery把它隐藏起来
$(".hidden").hide();
当页面加载时,表单会显示几毫秒,但在 jquery 工作后会隐藏...
【讨论】:
这里有一篇很好的文章:thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter【参考方案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:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
【讨论】:
【参考方案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;
【讨论】:
以上是关于在 IE8 中输入表单中的键不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥 unordered_multiset 对许多相等的键不起作用