2009-11-10 16 views
13

Na mojej stronie zarejestrowałem procedurę obsługi zdarzeń keypress dla całego dokumentu.Jak wyłączyć zdarzenie keypress JQuery dla tylko jednego elementu?

$(document).keypress(myhandler); 

Obsługuję klawisz spacji, aby przewijać listę.

Problem polega na tym, że istnieje element <input type='text' /> i nie chcę, aby naciśnięcie klawisza "spacji" powodowało przewijanie listy po jej wprowadzeniu.

Nie mogłem znaleźć żadnych informacji w obiekcie "zdarzenia" przekazanego przez JQuery do programu obsługi, aby określić, gdzie znajduje się źródło zdarzenia.

Odpowiedz

18

Alternatywnie, można dołączyć inny obsługi zdarzeń do pola wprowadzania, w tym obsługi powstrzymać rozprzestrzenianie zdarzenia:

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

W ten sposób można pozostawić globalną procedurę obsługi zdarzeń taką, jaka jest. Może być czystszy.

+0

Zdecydowanie czystszy. – HRJ

+2

Zamiast 'e.stopPropagation();' użyj 'e.preventDefault();' –

3

szukasz event.target.id, która będzie identyfikatorem elementu, na którym wydarzenie zostało podniesione. Więc wewnątrz myhandler będzie trzeba coś jak następuje

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

To działa! Dzięki! – HRJ

1

Zobacz docs Quirks Mode o event order, a przede wszystkim o tym, jak wyłączyć zdarzenia, co jest specyficzne dla przeglądarki. Cytat:

Pełną doświadczenia z różnymi przeglądarkami nie

function doSomething(e) 
{ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
Powiązane problemy