2010-04-09 8 views
4

J'essaie d'ajouter une classe (.active) à un champ de texte une fois que l'utilisateur commence à taper. Je l'ai eu pour fonctionner un peu avec le code suivant, mais pour une raison quelconque, la classe .active n'est pas appliquée immédiatement lorsque l'utilisateur commence à taper, elle est appliquée uniquement après qu'une deuxième lettre a été tapée. Des idées?jQuery live keydown ne s'enregistre pas avant le second keydown

$(document).ready(function() { 

    loginField = $('.field'); 

    loginField.live('keydown', function(){ 
     if ($(this).val()){ 
      $(this).addClass('active');  
     } 
    }); 
}); 

Répondre

4

Vous voulez keyup ici, commentaires sur les mises à jour selon:

$(document).ready(function() {  
    $('.field').live('keydown', function(){ 
     $(this).addClass('active'); 
    }).live('keyup', function() { 
     $(this).toggleClass('active', $(this).val() != ''); 
    }); 
}); 

Votre .live() tire correctement, mais le .val() ne change pas jusqu'à ce que les feux keyup, keydown feux avant que la valeur est mise à jour , donc votre if() n'est pas vrai tant que vous n'avez pas appuyé sur la 2e touche.

+1

Merci pour le conseil, Nick. C'est mieux avec le keyup, mais puisque la classe .active n'est ajoutée qu'après que l'utilisateur ait relâché la clé, ce n'est pas encore immédiat. Y at-il un moyen d'avoir ainsi la classe ajoutée juste quand l'utilisateur appuie sur la touche? – Simon

+0

@Simon - Il devrait être actif chaque fois qu'il contient * n'importe quel texte? ou seulement quand il est en cours d'édition et contient du texte? –

+0

option 2, quand il est en cours d'édition et contient du texte. J'ai déjà le reste des js pour supprimer la classe .active sur le flou. – Simon