2012-02-23 32 views
21

ngắn

Những gì tôi muốn làm là như sau: Đầu tiên, chức năng validate() phải rà soát tất cả các đầu vào từng người một: nếu họ không rỗng (hoặc whitespaced) sau đó di chuyển đến if statement (để kiểm tra các nút radio) Nhưng nếu một số đầu vào rỗng thì dừng toàn bộ hàm xác nhận hợp lệ và tập trung vào đầu vào rỗng.Exit không chỉ từ chức năng trẻ nhưng từ chức năng toàn bộ cha mẹ

Dưới đây là kết quả: http://jsfiddle.net/tt13/y53tv/4/

Chỉ cần nhấn nút ok, bạn sẽ thấy rằng nó đã hoàn thành chức năng đầu tiên và cháy nếu quá. Nhưng tôi muốn để thoát khỏi chức năng toàn bộ validate() trong trường hợp có cánh đồng trống, không chỉ từ mỗi) chức năng (

Chi tiết

JS

function validate() { 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      return false; 
     } 
    }); 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     return false; 
    } 
    return true; 
} 
$(document).ready(function() { 
    $("#add_question").submit(function(e) { 
     if (validate()) { 
      alert("good"); 
     } 
     e.preventDefault(); 
    }) 
});​ 

HTML Markup

<form id="add_question" method="post" action=""> 
<table> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="a" /> a) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_a" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="b" /> b) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_b" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="c" /> c) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_c" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="d" /> d) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_d" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="e" /> e) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_e" /> 

        </td> 

        </tr> 

       </table> 
<input type="submit" name="submit" value="ok" /> 

</form> 

Trả lời

18

Thêm cờ phải sai để tiếp tục.

function validate() { 
    var invalid = false; 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      invalid = true; 
      return false; 
     } 
    }); 
    if (invalid) { 
     return false; 
    } 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     return false; 
    } 
    return true; 
} 
$(document).ready(function() { 
    $("#add_question").submit(function(e) { 
     if (validate()) { 
      alert("good"); 
     } 
     e.preventDefault(); 
    }) 

});​ 
4

Chúng ta có thể phá vỡ các vòng lặp $ .each() tại một sự lặp lại đặc biệt bằng cách làm cho chức năng gọi lại trả về false. Trả về không sai cũng giống như câu lệnh tiếp tục trong vòng lặp for; nó sẽ bỏ qua ngay lập tức đến lần lặp tiếp theo.

Đặt cờ khi bắt đầu xác thực của bạn: var broken = false;. Bên trong số each, ngay trước return false;, thêm broken = true;. Sau đó, sau khi mã each thêm if(broken) return false;

1

Như vậy?

function validate() { 
    var pass = true; 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      pass = false; 
      return false; 
     } 
    }); 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     pass = false; 
     return false; 
    } 
    return pass; 
} 

Thêm biến kiểm tra xem điều kiện có đúng không.

Các vấn đề liên quan