2011-05-10 151 views
9

我需要將鍵盤上的「輸入」鍵綁定到特定的javascript方法,但只有當某個文本字段處於焦點狀態時。將文本框綁定到「輸入」鍵

<input id="post" type="text" style="width:400px;"/> 

我該怎麼做?

我知道你可以使用表單和提交動作的東西來做到這一點,但是當上面的input字段處於焦點時,我可以將「輸入」鍵綁定到特定函數嗎?

回答

18
$("#post").focus(function() { 
    $(this).data("hasfocus", true); 
}); 

$("#post").blur(function() { 
    $(this).data("hasfocus", false); 
}); 

$(document.body).keyup(function(ev) { 
    // 13 is ENTER 
    if (ev.which === 13 && $("#post").data("hasfocus")) { 
     ... 
    } 
}); 

我建議你,而不是綁定的ENTER keyup事件您$("#post")直接輸入而不是整個頁面上的事件監聽。

+0

如果您使用的是功能做別的事情,好像我是記得在函數調用之前拋出一個'e.preventDefault();'來防止表單被提交。 – Pachonk 2014-03-25 20:01:32

+1

你建議只綁定#post然後寫一個代碼來聽整個文檔?我甚至沒有... – user151496 2016-04-28 09:12:28

12

只需將onkeyup事件綁定到有問題的輸入即可。您根本不必擔心檢查焦點,因爲根據定義,輸入只有在焦點時纔會接收鍵盤事件。

我認爲jQuery是OK,因爲你包括在你的問題的標籤,所以在您的文檔準備好處理程序做這樣的事情:

$("#IDforyourcontrol").keyup(function(ev) { 
    // 13 is ENTER 
    if (ev.which === 13 && /*whatever other conditions you care about*/) { 
     // do something 
    } 
}); 
+0

「根據定義,輸入只能在聚焦時接收鍵控事件」並不嚴格。事件也可以通過編程方式進行調度,這樣輸入可以在焦點事件沒有焦點時接收到(並且其他元素上的許多事件也有冒泡和捕捉階段)。但是,向輸入添加密鑰監聽器應該足以滿足OP的要求。 – RobG 2011-05-10 01:03:18

+0

好吧,當然,我沒有考慮以編程方式觸發的事件,但似乎不太可能有人想要以編程方式觸發輸入鍵的鍵控並區分用戶操作。不過,我認爲我的主要觀點是有效的,爲此目的,您通常不需要擔心檢查焦點在哪裏。 Raynos的答案解釋瞭如何允許焦點,所以我猜想它會更完全地回答OP,儘管我不會將事件綁定到document.body(但我從來不需要爲這種類型的事情檢查焦點)。 – nnnnnn 2011-05-10 01:26:07

+0

好的答案,隱含的,高性能的。我在輸入本身上使用它'',然後'myFunction(e){if(e.which === 13 ....}' – 2015-11-24 08:08:19