2010-01-10 5 views
2

Je souhaite que les mêmes fonctions s'exécutent pour 2 objets jQuery: $('input[type="text"]') et $('textarea[type=text]'). Comment puis-je combiner ces deux dans le code ci-dessous? (actuellement, seule l'entrée est incluse).Même fonction pour plusieurs objets jQuery

$('input[type="text"]').focus(function() { 
     if (this.value == this.defaultValue){ 
      this.value = ''; 
     } 
     if(this.value != this.defaultValue){ 
      this.select(); 
     } 
}); 

$('input[type="text"]').blur(function() {  
     if ($.trim(this.value == '')){ 
      this.value = (this.defaultValue ? this.defaultValue : ''); 
     } 
}); 

Merci!

+1

Pourquoi votre 'textarea' ont 'type = text'? Ce n'est pas un attribut valide pour un 'textarea' –

+0

Je ne le savais pas. Mon objet est maintenant $ ('textarea') –

Répondre

9

Essayez ceci:

$('textarea[type="text"], input[type="text"]').focus(...).blur(...); 

De même, vous pouvez également utiliser la fonction add jQuery:

$('textarea[type="text"]').add('input[type="text"]').focus(...).blur(...); 
+0

Merci! La méthode .add a mieux fonctionné dans mon cas. –

1

Peut être plus facile de mettre une classe dessus et de filtrer par là.

0

Vous pouvez créer un plug-in:

jQuery.fn.clearDefValueOnFocus = function() { 
    return this.focus(function(){ 
     if (this.value == this.defaultValue){ 
      this.value = ''; 
     } 
     if(this.value != this.defaultValue){ 
      this.select(); 
     } 
    }).blur(function(){ 
     if (jQuery.trim(this.value) == ''){ 
      this.value = this.defaultValue || ''; 
     } 
    }); 
}; 

$('input[type="text"]').clearDefValueOnFocus(); 
$('textarea[type=text]').clearDefValueOnFocus(); 
Questions connexes