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

代わりに、入力タグ内で type="submit" を試してください。

于 2013-06-13T14:23:25.580 に答える
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 に答える