2011-01-28 59 views
1

$(document).keydown(function(e) {約按鍵和jQuery

那麼一個簡單的問題,這是我的代碼 - 我想知道是否有可能有類似:

$(document).not('#pinkElephant').keydown(function(e) {

(除,不工作...)

任何想法?

非常感謝!

p.s.所有這些功能都在裏面,是switch聲明。

[編輯]嘿傢伙ñ女同胞們 - 我不能return false;,因爲我需要鍵入的元素是<input>文本,所以鍵盤仍然需要回到這裏。

這真是困惑我:(

+0

什麼是`pinkElephant`?它是一個輸入元素嗎?還是一個容納多個輸入的容器? – user113716 2011-01-28 23:45:31

+0

神奇的粉色大象是`` – 2011-01-29 18:10:20

回答

5

下面是你需要什麼通過檢查目標元素的id不是pinkElephant的另一種方法。由於這種不使用通用選擇'*'應該有更好的表現:

$(document).keydown(function(e) { 
    if (e.target.id !== "pinkElephant") { 
     alert("I'm not pink!"); 
    } 
}); 

Here's a working example.

(從評論更新)

0

試試這個:

$(':not(#pinkElephant)').keydown(function(e) { 
    // ... 
}); 
5

如果你真的想在你的標記綁定keydown event handler所有節點,與#pinkElephant你需要異常像這樣做:

$(document).find('*').not('#pinkElephant').keydown(function() .. 

or short

$(':not(#pinkElephant').keydown(function() ... 

它隱含地使用通用選擇器*

請注意,這在性能方面從來沒有任何好處。我不知道你的標記,但我希望它不會使用那種選擇器。

更新

通過評論的啓發,你也可以不喜歡它:

$(document).click(function(event) { 
    if(event.target.id === 'pinkElephant' || $.contains($('#pinkElephant')[0], event.target)) 
     return false; 

    // ... 
}); 

最後片段檢查是否#pinkElephant本身還是一個子節點被點擊,並防止傳播+的默認操作。這是通過調用$.contains()help

+0

爲了在大量元素上獲得更好的性能,爲什麼不使用[`.live()`](http://api.jquery.com/live)? – 2011-01-28 23:40:13

2

我以爲你不想裏面pinkElephant元素觸發​​完成。

#pinkElephant上放置一個處理程序,用於停止事件的傳播。

$('#pinkElephant').bind('keydown',false); 

注意,通過false.bind()需要的jQuery 1.4.3或更高版本。

如果您使用的是舊版本,這樣做:

$('#pinkElephant').bind('keydown',function(){return false;});