2012-01-26 121 views
0

我有這樣的事件綁定到我的「身體」:如何防止jquery在textareas內部進行關鍵幀處理?

$('body').bind('keyup', doSomething);  

但我想避免內部文本域此事件。當專注於textareas時使用解除綁定事件並在模糊時重新綁定成本太高。有另一種方法可以做到嗎?

哦,我也試過:

$('body:not(textarea)').bind('keyup', doSomething); 

,但沒有工作。

感謝

回答

4

浮現在腦海中的兩種方法是:

  1. 在現有的處理程序測試event.target做什麼,如果它是一個textarea
  2. textarea元素上添加第二個處理程序,以停止keyup事件的傳播。

實際代碼:

// option 1 
$('body').bind('keyup', function(e) { 
    if (e.target.tagName.toLowerCase()==="textarea") 
     return; 

    // your existing non-textarea code here 
}); 

// option 2 
$('body').bind('keyup', doSomething); 

$('textarea').bind('keyup', function (e) { 
    e.stopPropagation(); 
}); 

演示了選項1:http://jsfiddle.net/XZTaC/

2

你可以添加一個單獨的處理器到停止事件的傳播textarea的:

$('textarea').bind('keyup', function (e) { 
    e.stopPropagation(); 
}); 
0

我從來雖然綁定到體內KEYUP。我會不同走近它,就像這樣:

$('*').not('textarea').bind('keyup', doSomething); 
+0

這不起作用,因爲它不從textarea的冒泡停止事件... – nnnnnn