2009-02-03 4 views
2

J'ai défini une gestion globale du clavier à l'aide de l'événement keypress de jQuery.Supprimer les événements de clavier pour les champs de saisie

est-il un moyen de supprimer ces événements pour entrée/textarea champs afin de ne pas interférer avec la saisie?
J'ai utilisé des hacks avec des conditions basées sur des sélecteurs d'éléments, mais ceux-ci ont eu un gros impact sur les performances car ils ont été déclenchés à chaque pression de touche.

(Certains de ces champs sont créés dynamiquement, ce qui est hors de mon contrôle - peut-être est pertinent.)

+0

[en le reliant à mon compte maintenant enregistré] – AnC

Répondre

3

Créer un gestionnaire onfocus pour toutes les entrées et les zones de texte qui définit une variable globale indiquant que les événements du clavier doivent être ignorées. Créez un autre gestionnaire pour l'événement de flou pour réinitialiser la variable globale.

var DISABLE_KEY_HANDLERS = false; 

$('input[type=text], input[type=password], textarea').focus(function(){ 
    DISABLE_KEY_HANDLERS = true 
}) 

$('input[type=text], input[type=password], textarea').blur(function(){ 
    DISABLE_KEY_HANDLERS = false 
}) 

Dans vos gestionnaires de clés, vous devez simplement vérifier si la valeur est vraie ou non, et renvoyer si elle est vraie.

+0

Merci! Le problème, cependant, sont les éléments créés dynamiquement; Je devrais réexécuter le code ci-dessus chaque fois qu'un nouveau champ de saisie est créé, ce qui est hors de mon contrôle. Néanmoins, cela aide, et peut-être que je peux trouver une solution de contournement pour les pièces dynamiques ... –

+0

Vous devriez regarder dans le plugin livequery: http://plugins.jquery.com/project/livequery/ – Zach

+0

Cela semble prometteur - beaucoup Merci! –

1

Il s'avère que l'événement me fournit déjà tout ce dont j'ai besoin; ev.target est l'élément DOM actif, donc je peux vérifier s'il s'agit d'un champ de saisie.

Questions connexes