[英]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.