2010-09-23 10 views
2

Je travaille avec un lecteur de code à barres qui enregistre des données en mode clavier dans une zone de texte. Il tape essentiellement dans un tas de nombres (environ 250 caractères) rapidement. Il y a un caractère de début "%" que je cherche et quand cela se présente je veux afficher une image fonctionnante/en attente tandis que le reste des données entre.JQuery & IE - délai de déclenchement d'événement

Cela fonctionne parfaitement dans Firefox et Chrome et de Bien sûr, pas IE. Dans IE, l'image ne s'affiche qu'après que toutes les données ont été lues dans la zone de texte, ce qui retarde fondamentalement le déclenchement de cet événement pour une raison quelconque. Une idée comment faire fonctionner cela?

Voici le code:

$("*").bind('keypress', function() { 
    if (event.keyCode == '037') { 
     $('#<%= this.txtData.ClientID %>').focus(); 
     $('#processingData').fadeIn('slow', function() { }); 
    } 
}); 

PS. J'écoute toutes les touches et sur la touche "%" j'appuie sur la zone de texte pour lire les données.

+0

Quelle version d'IE? –

+0

Je l'ai essayé dans IE7 et IE8 – markiyanm

Répondre

2

Vous liez un gestionnaire d'événements à chaque élément de la page. Plutôt que de le faire, utilisez la délégation d'événements pour lier un seul événement. Cela devrait l'accélérer énormément. IE utilise un moteur JavaScript plus ancien, donc il va être plus lent que les navigateurs modernes. Ce devrait changer quand IE9 est libéré. .live() liera un gestionnaire d'événement unique au document. De plus, vous devez transmettre l'objet événement à votre fonction. Faites-nous savoir comment cela fonctionne :)

$("*").live('keypress', function (event) { 
    if (event.keyCode == 37) { 
     $('#<%= this.txtData.ClientID %>').focus(); 
     $('#processingData').fadeIn('slow'); 
    } 
}); 
+0

Cela a fonctionné parfait! Merci John. – markiyanm