2010-10-08 6 views
1

J'essaye de faire toutes les zones de texte enlever le texte par défaut sur le foyer, excepté ceux de la classe "pre-fill". Mais le problème est que les zones de texte de la classe "pré-remplissage" sont toujours sélectionnées et incluses.Méthode jQuery .not() ne fonctionne pas correctement

Suggestions pour corriger la situation? Merci.

jQuery(document).ready(function inputHide(){ 

    $('textarea, input:text, input:password').not($('.pre-fill')).focus(function() { 
      if ($(this).val() === $(this).attr('defaultValue')) { 
       $(this).val(''); 
      } 
     }).blur(function() { 
      if ($(this).val()==='') { 
       $(this).val($(this).attr('defaultValue')) 
      } 
     }); 

}); 

Répondre

5

Vous ne devriez pas avoir la variable jQuery ($) dans l'appel de méthode .not. Essayez ceci:

.not('.pre-fill') 

Dans le contexte de votre code:

$('textarea, input:text, input:password').not('.pre-fill').focus(function() { 
     if ($(this).val() === $(this).attr('defaultValue')) { 
      $(this).val(''); 
     } 
    }).blur(function() { 
     if ($(this).val()==='') { 
      $(this).val($(this).attr('defaultValue')) 
     } 
    }); 
+2

'this.value' est plus efficace que' $ (this) .val() 'puisque vous ne disposez pas d'abord créer un objet jQuery puis appeler une méthode jQuery. –

1

Vous pouvez également utiliser la :not() selector. Notez que this.value est beaucoup plus efficace que $(this).val(), puisqu'il s'agit d'un accès direct à une propriété d'un élément DOM au lieu d'accéder à la même propriété en construisant d'abord un objet jQuery puis en appelant une méthode jQuery.

$('textarea, input:text:not(.pre-fill), input:password:not(.pre-fill)') 
    .focus(function() {   
     if (this.value === $(this).attr('defaultValue')) { 
      this.value = ""; 
     } 
    }).blur(function() { 
     if (this.value === '') { 
      this.value = $(this).attr('defaultValue'); 
     } 
    }); 
Questions connexes