我有一个标准的asp.net webform,上面有多个文本框(Autopostback = False)和一个Save按钮。
在任何文本框中按ENTER键会导致调用“保存”按钮的服务器端单击事件。如果我中断并查看调用堆栈,则单击事件是列出的唯一事件。我没有为表单设置默认按钮。
如果我在保存按钮上方放置了另一个按钮,则会在文本框上输入的任何按下时调用其单击事件。
为什么会发生这种情况,以及如何让它停止?
答案 0 :(得分:3)
对于任何webform都是如此:如果在输入字段具有焦点时按Enter键,则将提交表单(textareas除外)。要阻止这种情况,您需要一些JavaScript来捕获该事件并阻止提交表单。但请注意,按Enter键提交是许多用户的预期行为!
答案 1 :(得分:3)
这是除文本区域以外的大多数字段的默认行为。
要解决此问题,您可以在提交表单之前调用javascript函数来检查按键。
<script type="text/javascript">
function allowSubmission() {
return !(window.event && window.event.keyCode == 13); }
</script>
然后提交表单的唯一方法是实际点击提交。然而,正如许多人所提到的,提交表单的输入键是预期的行为,因此您可以随时更改函数以对字段进行基本验证,如果已填写所有必填字段,则允许输入键提交表单。
<script type="text/javascript">
function allowSubmission() {
return !(window.event && window.event.keyCode == 13) || validateInput(); }
</script>
编辑:您可以在提交按钮的OnClientClick方法上调用此函数。类似的东西:
<asp:Button id="SubmitBtn" runat="server" OnClientClick="return allowSubmission()"/>
答案 2 :(得分:2)
确保您的文本框设置为Multiline as TextMode,如果没有,则输入key正在执行一个命令按钮,导致回发。
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"></asp:TextBox>
如果您不希望文本框多行,则可以在JavaScript中截取按键命令,在按下输入时不执行任何操作。
这是一个如何
的例子function hookUpToEnterKey()
{
// Hook up to read enter key
document.onkeydown = processEntryKey;
}
function processEntryKey(e)
{
if( !e )
{
if( window.event )
{
//Internet Explorer
e = window.event;
}
else
{
// Cannot get the even return.
return;
}
}
if( typeof( e.keyCode ) == 'number' )
{
//DOM
e = e.keyCode;
}
else
if( typeof( e.which ) == 'number' )
{
//NS 4 compatible
e = e.which;
}
else
if( typeof( e.charCode ) == 'number' )
{
//also NS 6+, Mozilla 0.9+
e = e.charCode;
}
else
{
//total failure, we have no way of obtaining the key code
return;
}
if(e == 13)
{
// Do nothing
return false;
}
}
答案 3 :(得分:1)
我遇到了完全相同的问题:我有一个数据绑定网格视图,一个文本框和一个按钮。文本框用于过滤网格内容,作为搜索框。该按钮用于完全不同的动作。在按下按钮之前,按下文本框上的回车键会导致网格被过滤,这是预期的行为。但是一旦我按下按钮,在按下文本框时按下Enter键会导致按钮的onclick事件被调用。我通过将true设置为文本框的autopostback属性来修复它。我不明白为什么,但不知何故它覆盖了文本框的表单提交行为。希望它有所帮助
答案 4 :(得分:0)
您的浏览器正在尝试成为一个好人,并为您单击按钮,即使您没有将其设置为“默认”(它将在输入时“单击”表单中的第一个按钮)。 / p>
就像David说的那样,如果你想让enter键在文本框中引起换行,那么它需要是多行的