2010-09-29 43 views

Trả lời

53

Bạn đang nhảy ra ngoài, nhưng từ các nội vòng lặp, tôi sẽ thay vì sử dụng một bộ chọn cho cụ thể "không có giá trị" của bạn kiểm tra, như thế này:

function validate(){ 
    if($('input[type=text][value=""]').length) return false; 
} 

Hoặc, thiết lập kết quả khi bạn đi bên trong vòng lặp, và trở lại rằng kết quả từ các vòng ngoài:

function validate() { 
    var valid = true; 
    $('input[type=text]').each(function(){ 
    if($(this).val() == "") //or a more complex check here 
     return valid = false; 
    }); 
    return valid; 
} 
+0

+1 cho sử dụng thông minh của selector và chiều dài. – Nolo

+0

@Nick Craver, Đây là một bài viết rất cũ nhưng tôi có một câu hỏi. Có bất kỳ rủi ro nào ở trên hàm đó trả về 'true' trước khi' mỗi 'vòng lặp hoàn thành? – YahyaE

+1

Hoàn toàn không có rủi ro như vậy bởi vì cho đến khi .each() hoàn thành, nó sẽ không tiến hành báo cáo cuối cùng. @YahyaE – K48

13

Bạn có thể làm điều đó như thế này:

function validate(){ 
    var rv = true; 
    $('input[type=text]').each(function(){ 
     if($(this).val() == "") { 
      rv = false; // Set flag 
      return false; // Stop iterating 
     } 
    }); 
    return rv; 
} 

Đó giả sử bạn muốn quay trở lại true nếu bạn không tìm thấy nó.

Bạn có thể thấy rằng đây là một trong những sitautions mà bạn không muốn sử dụng each tại tất cả:

function validate(){ 
    var inputs = $('input[type=text]'); 
    var index; 
    while (index = inputs.length - 1; index >= 0; --index) { 
     if (inputs[index].value == "") { // Or $(inputs[index]).val() == "" if you prefer 
      return false; 
     } 
    } 
    // (Presumably return something here, though you weren't in your example) 
} 
Các vấn đề liên quan