簡體   English   中英

關於按鍵和jQuery的快速問題

[英]A quick question about keypress and jQuery

$(document).keydown(function(e) {

好吧,那是我的代碼-我想知道是否可能有類似這樣的東西:

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

(除了,那不行...)

有任何想法嗎?

非常感謝!

ps里面所有的功能都是一個switch語句。

[編輯]嘿家伙ñ女同胞們-我不能return false; 因為我需要輸入的元素是<input>文本,所以鍵盤仍然需要返回此處。

這真的讓我感到困惑:(

如果您確實想將keydown event handler綁定到標記中的所有節點,除了#pinkElephant之外,您需要這樣做:

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

或短

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

隱式使用通用選擇器*

請注意,就性能而言,這永遠不會有任何好處。 我不知道您的標記,但是我希望使用這種選擇器不會造成太大的傷害。

更新

受評論的啟發,您也可以像這樣:

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

    // ...
});

最后一個代碼段檢查是否#pinkElephant本身或子節點,並阻止了傳播和默認操作。 這是通過調用$.contains() 幫助來完成的

這是通過檢查目標元素的id是否不是pinkElephant來執行所需操作的另一種方法。 由於此方法不使用通用選擇器'*'因此它應具有更好的性能:

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

這是一個工作示例。

(從評論更新)

我假設您不希望pinkElephant元素觸發keydown

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

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

請注意,將false傳遞到.bind()需要jQuery 1.4.3或更高版本。

如果您使用的是舊版本,請執行以下操作:

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

嘗試以下方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM