我有一个带有文本框和按钮的表单。 IE是唯一一个按下Enter键时不提交表单的浏览器(适用于FF,Opera,Safari,Chrome等)。我发现这个javascript函数试图哄骗IE进行表现;但无济于事:
function checkEnter(e){
var characterCode
if (e && e.which) {
e = e
characterCode = e.which
} else {
e = event
characterCode = e.keyCode
}
if (characterCode == 13) {
document.forms[0].submit()
return false
} else {
return true
}
}
实施:
searchbox.Attributes("OnKeyUp") = "checkEnter(event)"
有什么建议吗?
编辑: This page CodeProject概述了Dillie所说的内容,并且效果非常好。
答案 0 :(得分:25)
只需在页面上的隐藏div中创建文本输入即可。这将绕过IE漏洞。
示例div:
<!-- Fix for IE bug (One text input and submit, disables submit on pressing "Enter") -->
<div style="display:none">
<input type="text" name="hiddenText"/>
</div>
答案 1 :(得分:13)
我过去做的另一件事是将表单区域包装在Panel中,并将DefaultButton属性设置为您拥有的提交按钮。只要在面板区域中有一个焦点的表单元素,这就可以有效地将输入键映射到提交。
答案 2 :(得分:3)
这里有一个很好的写这个问题,以及一个很好的基于jquery的解决方案:
http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter
答案 3 :(得分:2)
// Use the following Javascript in your HTML view
// put it somewhere between <head> and </head>
<script language="JavaScript" type="text/javascript"><!--
function KeyDownHandler(btn)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
btn.click();
}
}
// -->
</script>
// Put this in your TextBox(es) aka inside <asp:textbox ... >
onkeydown="KeyDownHandler(ButtonID)"
答案 4 :(得分:1)
使用display:none
时,IE将无法看到该按钮,因此无法使用它来提交表单。相反,您可以使用z-index
和绝对定位将其隐藏在另一个元素下,例如风格:
position:absolute; bottom: -20px; left: -20px; z-index: -1;
现在它仍然存在,可以被IE使用,但隐藏在另一个元素之下。
答案 5 :(得分:1)
隐藏按钮 - 不使用display:none,但使用以下样式:
position: absolute; /* no longer takes up layout space */
visibility: hidden; /* no longer clickable / visible */
如果这样做,您将不需要添加任何其他元素或隐藏的输入。
答案 6 :(得分:0)
这是由于IE中单个文本字段输入的特殊性。
一个简单的解决方案是通过添加另一个隐藏的文本字段来停止具有单个文本字段的页面。
<input type="text" name="hidden" style="visibility:hidden;display:none;" />
答案 7 :(得分:-1)
是否使用GET而不是POST?网址太长了吗?我见过......
答案 8 :(得分:-1)
基本上,表单需要一个按钮,输入类型=“提交”或输入类型=“图像”,以使内置行为能够在输入时提交表单。您不应该需要javascript来提交它。