原文地址:
http://blog.csdn.net/lingxyd_0/article/details/4200985
最近在做站内搜索,想点击回车直接执行onclick事件,死活不行。
可是我记得,我登录页面可以直接回车执行按钮事件的呀!!!
当然用js做 当然可以,但是我不甘心!!找呀找,终于找到原因了,很奇特。。。
摘抄原文一段:
为了更好的理解这个问题,假设以下情况:我们有一个页面,它包含了很多个名字从TextBox1到TextBoxN的单行TextBox和一个叫做btnSubmit的按钮,按钮的Value为Click Me!(按钮的Value就是显示在Button上面的文本)(在这里,这些名字是根据Web控件的ID号来取的)。当一个用户填好页面并在一个TextBox中点击回车键时,这个页面会被提交,同时发送回下面的字符串(包含在提交的内容中):
TextBox1=Value1&TextBox2=Value2&&TextBoxN=ValueN&btnSubmit=Click Me!
Value1…ValueN是输入给TextBox1到TextBoxN的内容。
当ASP.NET的页面被提交之后,它通过分析这个字符串能够知道这次提交是由于btnSubmit按钮控件所导致的。它会触发Web控件的Click事件,你的事件处理代码也就可以执行了。
如果你现在只有一个单行的文本输入框,包含在提交内容中的字符串会忽略掉btnSubmit=Click Me!。也就是说如果你只包含了一个叫做TextBox1的单行输入框,你会得到下面的提交内容:
TextBox1=Value1
没有信息提到哪个按钮触发了这次提交,ASP.NET的服务器端不能够正确的触发按钮的Click事件。因此,如果你的页面只包含一个单行文本输入框(甚至还有另外的输入控件,例如CheckBoxList,RadioButtonList,DropDownList等等),使用InternetExplorer时,点击回车将不会触发Button控件的Click事件——其它浏览器,例如FireBox,总是会提交按钮的值与名称,即使只有一个文本输入框。
解决方案:
用户点击回车键很可能会导致页面提交但却不会触发Button控件的Click事件。不创建包含单个TextBox控件的页面就可以很简单的解决这个局限性问题。更适当的说,如果在一些情况下你只要一个TextBox,增加一个“人造”的TextBox——一个仅仅用来解决这个问题的TextBox。如上面所讨论的,你可以很简单的使用一点CSS来隐藏这些“人造”的TextBox。