2010-08-20 6 views
7

Supposons que j'utilise un plugin jQuery "espace réservé" qui lit l'attribut "espace réservé" des éléments d'entrée et le simule pour les navigateurs qui ne prennent pas encore en charge les espaces réservés. Mais je voudrais quand même que $ ("input"). Val() fonctionne correctement - c'est-à-dire que "" si le texte dans la zone de texte est le texte de l'espace réservé. Est-il possible de surcharger .val() juste pour ces entrées?Puis-je remplacer jQuery .val() uniquement pour certains éléments d'entrée?

Répondre

6

essayez ceci:

jQuery.fn.rVal=function() { 
    if(this[0]) { 
     var ele=$(this[0]); 
     if(ele.attr('placeholder')!=''&&ele.val()==ele.attr('placeholder')) { 
      return ''; 
     } else { 
      return ele.val(); 
     } 
    } 
    return undefined; 
}; 

et il suffit d'utiliser $ ("# ele_id") rVal() pour récupérer les valeurs.. Ou si vous voulez remplacer la fonction val (et l'utiliser comme normal):

jQuery.fn.rVal=jQuery.fn.val; 
jQuery.fn.val=function(value) { 
    if(value!=undefined) { 
     return this.rVal(value); 
    } 
    if(this[0]) { 
     var ele=$(this[0]); 
     if(ele.attr('placeholder')!=''&&ele.rVal()==ele.attr('placeholder')) { 
      return ''; 
     } else { 
      return ele.rVal(); 
     } 
    } 
    return undefined; 
}; 
+0

c'est le chemin à parcourir. – Ender

+0

Mais que se passe-t-il si l'utilisateur tape réellement une valeur qui est la même que l'espace réservé? – RobG

2

Vous pouvez remplacer la méthode val() globalement, puis vérifier s'il s'agit d'une entrée normale.

0

Pourriez-vous éventuellement utiliser un plugin filigrane?

http://code.google.com/p/jquery-watermark/

Il est assez facile à utiliser, il suffit d'appeler $("input").watermark("Placeholder text") et il se comportera de la manière que vous avez décrite

Questions connexes