0

我想在点击输入时点击一个“搜索”按钮。

这是我的html

<input type="text" runat="server" id="txtSearch" onkeypress="searchKeyPress(event);" 
<input type="button" runat="server" style="padding:5px;" id="butSearch" onserverclick="butSearch_Click" value="Search" disabled/>

这是我正在使用的 javascript

function searchKeyPress(e) { 
  if (typeof e == 'undefined' && window.event) { e = window.event; }
  if (e.keyCode == 13) {
    document.getElementById("butSearch").click();
  }
}

但是我收到一个错误

'Uncuaght TypeError:Cannot call method click of nul'

关于为什么我会收到此错误的建议,是否有更好的选择来实现这一点?

4

4 回答 4

3

这些是runat="server"必需的吗?你得到错误是因为当searchKeyPress被调用时,你的按钮不存在(还)。要么它在 DOMContentLoaded 之前被触发,要么 asp.net 正在用你的按钮做一些时髦的事情,将它完全排除在 DOM 之外。

还有一些通用的 JavaScript 提示:

function searchKeyPress(e) { 
  // a much cleaner "use var, or assign if not defined":
  e = e || window.event;

  // strict comparison:
  if (e.keyCode === 13) {

    // verify we have a button:
    var btn = document.getElementById("butSearch");

    if (btn) {
      btn.click();
    } else {
      // btn does not exist. arbitrary code goes here
    }
  }
}
于 2013-06-13T14:20:32.663 回答
1

在 ASP.NET 中,生成的客户端 ID 不是您在 ASP.NET 标记中看到的那些(查看生成的源代码) 您需要调用ClientID控件的属性才能通过 javascript 或 jQuery 访问它。

您可以尝试:

function searchKeyPress(e) { 
  if (typeof e == 'undefined' && window.event) { e = window.event; }
  if (e.keyCode == 13) {
    document.getElementById('<%=butSearch.ClientID%>').click();
  }
}

如果您了解 ASP.NET Id 是如何生成的,您还可以使用控件的ClientIDMode,将其设置为静态。

于 2013-06-13T14:20:37.257 回答
1

你可以这样做:

function searchKeyPress(e) { 
    e = e || window.event;
    var key = e.keyCode || e.which;
    if (key == 13) {
        document.getElementById("butSearch").click();
    }
}
于 2013-06-13T14:20:49.367 回答
1

尝试在输入标签内输入=“提交”。

于 2013-06-13T14:23:25.580 回答