2010-09-08 2 views
2

Voici le problème, en termes abstraits: J'ai trois champs d'entrée (A, B, C). deux d'entre eux doivent être des entrées de texte (A et B), le troisième est de type non pertinent. Je dois activer le troisième si A n'est pas vide et B n'est pas vide. Je dois désactiver C si A est vide ou si B est vide.comment vérifier si la valeur d'une entrée de texte est vide juste après l'événement keypress en javascript?

Le code

 
// empty is the empty function from the phpjs project 
// framework used: jQuery 
// A, B and C are classes here 

$(".A, .B").keypress(function(){ 
    if(!empty($(".A").val()) && !empty($(".B").val())) 
     $(".C").attr("disabled",""); 
    else 
     $(".C").removeAttr("disabled"); 
}); 

Je veux être en mesure de vérifier à chaque touche, mais en demandant la valeur de l'entrée qui est modifié lorsque l'événement touche est pressée i obtenir la valeur qui a été calculée avant la keypress un événement.

Est-ce que quelqu'un a déjà trébuché sur cela avant de le résoudre?

Répondre

1

Attachez votre gestionnaire à l'événement keyrelease. La valeur devrait avoir été mise à jour d'ici là. Avez-vous essayé d'utiliser l'événement keyUp?

0
$('.A, .B').keydown(function(event) { 
    if(!empty($('.A').val()) && !empty($('.B').val())) 
     $(".C").attr("disabled",""); 
    else 
     $(".C").removeAttr("disabled"); 
    }); 
0

Lors de l'événement keypress, la valeur de la INPUT est pas encore fixé. Par conséquent, vous ne pouvez pas facilement savoir s'il est vide.

Pendant que le keyup se déclenche, la valeur de INPUT est définie.

Mais les choses empirent. L'utilisateur peut vider le champ avec la souris ou le menu Edition du navigateur. Dans ce cas, keyup n'est pas déclenché.

Dans notre application Web, nous enregistrons automatiquement les valeurs.
Comme dans Mac OS, si vous le savez, il n'y a presque pas de boutons de sauvegarde.

Pour permettre une réaction ici est plus ou moins ce que nous faisons:

  1. onfocus: un setInterval démarre l'interrogation tous les 120ms ou si, et vérifie l'entrée pour tout changement
  2. s'il y a un changement ne l'action correspondante
  3. onblur: un clearInterval arrêter le vote
0

utilisent une combinaison de gestionnaires pour keyup et change. le gestionnaire keyup se mettra à jour au fur et à mesure que l'utilisateur saisit (à l'exception des cas de bords, par exemple, une touche enfoncée, ce qui ne semble pas poser de problème) et le gestionnaire change saisira des choses comme l'utilisateur coupe le texte avec des actions de souris champ C. comme mesure supplémentaire, vous pouvez ajouter une vérification sur l'événement focus du champ C, pour vous assurer que A et B ont réellement quelque chose.

Questions connexes