2015-09-30 32 views
0

所以我有這個頁面,用戶可以在其中使用方向鍵在不同的項目之間導航。對於這一點,我用一個jQuery粘結劑:Javascript - 綁定到鍵盤事件,除非用戶在文本輸入中

$(document.body).bind('keydown', function(event) { 
// use the directional keys 

我想這個事件在工作每次,但如果用戶聚焦在文字輸入。

所以,我試圖篩選出這樣的事件:

$(document.body).bind('keydown', '*:not(input[type="text"], textarea)', function(event) { 

可惜過濾器不能正常工作,並且在任何情況下的事件觸發。

我可以檢測頁面中每個輸入的焦點(和模糊)事件,並通過全局布爾值禁用移動事件,但是我發現它很不雅觀。

有沒有辦法讓輸入字段「消耗」事件,或者像我試圖做的那樣用反向選擇器過濾事件?

由於提前,

+0

給定的代碼工作時正確的函數'。對( )'是用來代替'.bind()'http://jsfiddle.net/1w0em16n/1/ – Popnoodles

+0

嗯,我不知道;我測試了兩個(在Firefox和Chrome上),並且每個事件都會觸發 –

回答

0

我無法使on()的選擇器工作,所以我終於解決了問題EM通過接收濾波後的event.target:

$(document.body).on('keydown', function(event) { 
    if (!$(event.target).is('input[type="text"], textarea')){ 
    // handle keys... 

(溶液提出的人誰刪除了自己的答案,所以我在這裏追溯它)

+1

這是@AmmarCSE – Popnoodles

2

無效.bind()語法。傳遞給.bind()的事件不能委託。

你可能意味着使用.on()

$(document.body).on('keydown', '*:not(input[type="text"], textarea)', function(event) { 

}); 

JSFiddle

如果使用之前.on() jQuery的版本(你不應該..),你可以使用delegate()

$(document.body).delegate('*:not(input[type="text"], textarea)', 'keydown', function(event){ 

}); 
+0

感謝您的提示;然而,無論是「開」還是「綁定」,事件都會觸發,無論條件如何......最後,我對事件的目標進行了自我篩選 –

相關問題