2011-02-06 2 views
0

L'utilisateur peut choisir entre deux types de message, chacun avec une longueur différente. 160 caractères et 1071 caractères sont des types de message pris en charge.Basculer entre deux compteurs jQuery

Bien normalement, l'utilisateur sélectionne un type et écrit son message. Mais pendant qu'il écrit, il peut changer le type de message.

Voilà comment j'utiliser le compteur:

switch(max){ 
     case 160: 
      $('#message').NobleCount('#messageInfo',{ 
       max_chars: max, 
       block_negative: true 
      }); 
     break; 
     case 1071: 
      $('#message').NobleCount('#messageInfo',{ 
       max_chars: max, 
       block_negative: true, 
       on_update: function(t_obj, char_area, c_settings, char_rem){ 
        //... 
       } 
      });  
     break; 
    } 

Le problème est quand 160 est sélectionné et l'utilisateur a écrit 160 caractères et commutateurs pour 1071 Chars le compteur affiche 911 restants, mais ne permet pas à l'utilisateur pour entrer d'autres caractères.

J'appelle le code ci-dessus à chaque fois que l'utilisateur change de type de message. Est-ce que quelqu'un a une idée sur ce problème? Peut-être que noble-coun t devrait juste être retiré d'une manière ou d'une autre? Mais n'est-il pas écrasé de toute façon dans mon cas?

Répondre

3

La raison est que NobleCount ne réinitialise pas les écouteurs d'événements qu'il lie. Ainsi, lorsque vous appelez .NobleCount() la seconde fois, bien qu'il ajoute un écouteur d'événement qui vous empêchera d'entrer le plus grand nombre de max_chars, l'ancien est toujours là, donc il continuera à vous empêcher d'entrer le plus petit nombre de max_chars.

La solution est d'ajouter 2 appels de fonction au fichier NobleCount:

Sur les lignes 285 et 294, changement:

-- $(t_obj).keydown(function(e) { 
++ $(t_obj).unbind('keydown').keydown(function(e) { 

-- $(t_obj).keyup(function(e) { 
++ $(t_obj).unbind('keyup').keydown(function(e) { 

(- est l'ancienne ligne, ++ est la ligne le remplacer par)

Pour un exemple de travail, voir: http://jsfiddle.net/Fm5dC/ (littéralement je copiais tout son js de github dans jsFiddle, il semble laid, mais si vous faites défiler dans le cadre javascript vous verrez que ive mis en œuvre le précité changement ned)

Je dois mentionner probablement que ce n'est pas la meilleure solution parce que si vous avez une autre keydown ou keyup auditeur, il les enlèvera aussi bien, même si ive vous a montré où le problème est, ce n'est pas difficile de faire ce correctif plus solide d'ici.

En outre, s'il vous plaît contacter l'auteur du plugin avec la description du bug, cette solution de contournement etc. afin qu'il puisse mettre en œuvre cela pour les masses.