2012-10-23 30 views
5

Tôi đang cố gắng lặp qua một tập hợp các mục có lớp required. Tôi nghĩ rằng tôi phải sử dụng chức năng $.each không chính xác.

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'); 
      } 

     } 
     }); 
    } 

Tôi thấy rằng các phần tử trong giao diện điều khiển là <input type=​"text" id=​"name_input" class=​"pr required">​

Và sau đó các lỗi Uncaught TypeError: Object #<HTMLInputElement> has no method 'hasClass'

Làm thế nào có thể đối tượng mà không có phương pháp hasClass?

+2

should not nó được $ (elem) .hasClass ('..')? –

Trả lời

9

gợi ý đầu tiên của bạn nên được rằng đối tượng là một #<HTMLInputElement> và không phải là một Đối tượng jQuery. Sử dụng $(elem).hasClass('re');

+0

aha yes. Đó là một gợi ý khá rõ ràng bây giờ tôi thấy nó. tại sao jquery sẽ không trả lại một đối tượng jquery? Cảm ơn nhiều! – 1252748

+0

Vì bạn đang lặp qua các phần tử DOM nên nó sẽ trả về một phần tử DOM. Bạn sẽ cần phải tạo một đối tượng jQuery từ phần tử DOM đó :) –

+0

mọi thứ có ý nghĩa ngay bây giờ. cảm ơn nhiều! – 1252748

2

elem trong mã của bạn là một đối tượng phần tử DOM, nếu bạn muốn sử dụng phương pháp jQuery bạn nên tạo một đối tượng jQuery đầu tiên:

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

Bạn làm cho .re phần lớp của selector jQuery của bạn và lưu nếu/thì:

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'); 
     } 
    }); 
} 
Các vấn đề liên quan