2012-10-23 7 views
5

Sto tentando di eseguire l'iterazione su una raccolta di elementi con la classe required. Penso che devo usare la funzione $.each in modo errato.

function required(address) { 
    //object to hold elements not passing validation tests 
    var pass = true; 
    $('.required').each(function(index, elem){ 
     console.log(elem); 
     //check if it has the class indicating it is an email 
     if (elem.hasClass('re')) { 
      var validEmail = validateEmail(address.email); 
      if (!validEmail){ 
       $(this).addClass('nv'); 
      } 

     } 
     }); 
    } 

Vedo che l'elemento nella console è <input type=​"text" id=​"name_input" class=​"pr required">​

E poi l'errore Uncaught TypeError: Object #<HTMLInputElement> has no method 'hasClass'

Come può tale oggetto non hanno il metodo hasClass?

+2

sognerei che essere $ (elem) .hasClass ('..')? –

risposta

9

Il tuo primo accenno dovrebbe essere che l'oggetto è un #<HTMLInputElement> e non un oggetto jQuery. Utilizzare $(elem).hasClass('re');

+0

aha sì. Questo è un indizio abbastanza ovvio ora che lo vedo. perché jquery non restituirebbe un oggetto jquery? Grazie mille! – 1252748

+0

Poiché si sta iterando su elementi DOM, quindi restituirà un elemento DOM. Dovrai creare un oggetto jQuery da quell'elemento DOM :) –

+0

adesso tutto ha senso. grazie mille! – 1252748

2

elem nel codice è un oggetto DOM elemento, se si desidera utilizzare metodi di jQuery è necessario creare un oggetto jQuery prima:

if ($(elem).hasClass('re')) { 
1

a fare la parte .RE classe di vostro selettore jQuery e salvare il if/then:

function required(address) 
{ 
    //object to hold elements not passing validation tests 
    var pass = true; 
    $('.required.re').each(function(index, elem) { 
     console.log(elem); 
     var validEmail = validateEmail(address.email); 
     if (!validEmail){ 
      $(this).addClass('nv'); 
     } 
    }); 
} 
Problemi correlati