2009-11-10 64 views
13

在我的網站上,我註冊了整個文檔的按鍵事件處理程序。如何僅爲一個元素禁用JQuery keypress事件?

$(document).keypress(myhandler); 

而我處理'空格'鍵滾動列表。

問題是,有一個<input type='text' />元素,我不希望'space'按鍵在列表中輸入時會滾動列表。

我無法在JQuery傳遞給處理程序的「event」對象中找到任何信息,以確定事件來源的位置。

回答

18

或者,您可以附加其他事件處理程序的輸入字段,並在此處理停止事件的傳播:

jQuery('#input-field-id').bind('keypress', function(e) { 
    e.stopPropagation(); 
}); 

這樣,您可以保持全局事件處理程序不變。可能會更清潔。

+0

絕對清潔。 – HRJ 2009-11-10 14:54:15

+2

而不是'e.stopPropagation();'使用 'e.preventDefault();' – 2015-10-26 12:53:19

3

您正在尋找event.target.id,它將成爲事件引發元素的ID。所以裏面myhandler你需要像下面

function myhandler(e) { 
    if (e.target.id !== 'id of input') { 
     /* rest of event handler */ 
    } 
} 
+0

工程!謝謝! – HRJ 2009-11-10 14:50:16

1

見怪異模式文檔有關event order,特別是關於如何關閉的事件,這是特定瀏覽器。報價:

對於一個完整的跨瀏覽器的體驗就

function doSomething(e) 
{ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
相關問題