Comment désactiver l'événement de pression de touche JQuery pour un seul élément?

Sur mon site, j'ai enregistré un gestionnaire d'événements keypress pour l'ensemble du document.

$(document).keypress(myhandler); 

Et je manipule la touche 'espace' pour faire défiler une liste.

Le problème est qu'il y a un <input type='text' /> element, et je ne veux pas que la touche 'space' touche pour faire défiler la liste lorsqu'il est entré dans l'entrée.

Je n'ai pas trouvé d'informations dans l'objet "événement" passé par JQuery au gestionnaire, pour identifier où est la source de l'événement.

Alternativement, vous pouvez attacher un autre gestionnaire d'événements au champ de saisie et, dans ce gestionnaire, arrêter la propagation de l'événement:

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

De cette façon, vous pouvez quitter le gestionnaire d'événements global tel quel. Peut être plus propre.

Vous recherchez event.target.id , qui sera l'identifiant de l'élément sur lequel l'événement a été généré. Donc, dans la myhandler vous auriez besoin de quelque chose comme le suivant

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

Consultez les documents QuirksMode sur l' ordre des événements , et en particulier sur la façon d'éteindre les événements, ce qui est spécifique au navigateur. Citation:

Pour une expérience complète de navigateur

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