2014-06-15 4 views
2

J'utilise Jquery pour supprimer une valeur par défaut dans une entrée HTML active.Transmettre var entre deux fonctions Javascript/Jquery?

Cependant, si rien n'est entré dans l'entrée, je veux que la valeur par défaut réapparaisse.

Pour essayer de faire cela, je l'ai créé:

$("#contact input").each(function(index) { 

     $(this).focus(function() { 
      var valvalue = $(this).val(); 
      $(this).val(''); 
     }); 

     $(this).focusout(function() { 
      var newvalvalue = $(this).val(); 
      if(newvalvalue == ''){ 
       $(this).val('', valvalue); 
      } 
     }); 

    }); 

La fonction focus() fonctionne très bien, mais la valvalue variable ne sont pas repris par la fonction focusout.

Quelqu'un connaîtrait-il un moyen de transmettre la variable valvalue à cette deuxième fonction focusout?

+1

créér 'valvalue' global pour les deux gestionnaires d'événements – Diode

+1

Sûrement pas "global" .. – user2864740

+0

http://stackoverflow.com/questions/500431/javascript-variable-scope – user2864740

Répondre

4

Vous devez rendre varvalue visible par les deux gestionnaires d'événements. Cela peut être fait en le déclarant hors de leur portée.

$("#contact input").each(function(index) { 

    var valvalue; /* both event handlers can see it here */ 

    $(this).focus(function() { 
     valvalue = $(this).val(); 
     $(this).val(''); 
    }); 

    $(this).focusout(function() { 
     var newvalvalue = $(this).val(); 
     if(newvalvalue == ''){ 
      $(this).val('', valvalue); 
     } 
    });  

}); 
+0

Merci, mais ne marche pas que tout dire la fonction de mise au point obtiendrait simplement une valvalue vide (c.-à-d. pas la valeur obtenue dans la première, fonction de mise au point)? – MeltingDog

+0

Pas de "focus" sans "focus" :) – Diode

1

Vous rencontrez un problème avec la portée de fermeture dans JS. Essayez de définir varvalue en dehors de votre fonction afin que les deux fonctions référencent la même variable.

$("#contact input").each(function(index) { 
     var valvalue; 
     $(this).focus(function() { 
      valvalue = $(this).val(); 
      $(this).val(''); 
     }); 

     $(this).focusout(function() { 
      var newvalvalue = $(this).val(); 
      if(newvalvalue == ''){ 
       $(this).val('', valvalue); 
      } 
     }); 

    }); 
1

En plus d'autres réponses, vous pouvez utiliser la propriété placeholder disponible en HTML5, si vous ne voulez pas soutenir les anciens navigateurs.

<input type="text" name="name" placeholder="Enter here"> 
Questions connexes