ASP.NET中TextBox按下Enter键无法触发后台Button点击事件的问题求解
嘿,我一眼就瞅见你JavaScript代码里的一个低级错误啦,这正是导致Enter键按了没反应、后台断点抓不到的核心原因!
问题出在哪?
看这段JS代码:
var cmdFindElement = document.getElementById('<%= txtFind.ClientID%>');
你本来要获取cmdFind按钮的元素,结果写成了txtFind.ClientID——等于你又拿到了文本框本身!调用文本框的click()当然不会触发按钮的后台点击事件啦,浏览器没报错是因为文本框确实存在,只是这个操作根本不是你想要的。
修正后的完整代码
把那行错误的代码改成cmdFind.ClientID就行,修正后的代码如下:
前端HTML与JS
<asp:TextBox ID="txtFind" Style="z-index: 103; position: absolute; top: 306px; left: 192px; width: 133px;" TabIndex="1" runat="server" ToolTip="Enter the search criteria for the notes you wish to find" CssClass="aNorm" /> <asp:Button ID="cmdFind" Style="z-index: 105; position: absolute; top: 305px; left: 469px" TabIndex="-1" runat="server" Height="18" Width="45px" Font-Names="Verdana" Font-Size="XX-Small" Text="Find" ToolTip="Find notes that match your criteria (entered to the left of this button)" /> <script type="text/javascript"> <!-- const txtFindElement = document.getElementById('<%= txtFind.ClientID%>'); if (txtFindElement) { txtFindElement.onkeyup = function(e) { if (e.key === 'Enter' || e.keyCode === 13) { // 这里改成cmdFind的ClientID,拿到正确的按钮元素 var cmdFindElement = document.getElementById('<%= cmdFind.ClientID%>'); if (cmdFindElement) { cmdFindElement.click(); } } }; } // --> </script>
后台VB.NET代码(无需修改)
Private Sub cmdFind_Click(sender As Object, e As EventArgs) Handles cmdFind.Click Dim sV As String = txtFind.Text Dim sFindWhat$ = Trim(cboFindWhat.SelectedItem.Value) Dim attachments As New FTPService End Sub
额外要检查的点
- 确保所有控件都在
<form runat="server">标签内部,ASP.NET的回发事件必须依赖服务器端表单才能触发。 - 你的按钮设置了
TabIndex="-1",虽然一般不影响点击,但如果修正后还是有问题,可以暂时把这个值改成正常的正整数测试一下。 - 确认按钮的
UseSubmitBehavior属性是true(默认就是这个值),它确保按钮能正常触发表单提交流程。
改完之后,按下TextBox里的Enter键,应该就能正常触发后台的cmdFind_Click事件,断点也能命中啦!
备注:内容来源于stack exchange,提问作者jp2code
相关产品推荐
相关产品推荐

