2013-12-16 38 views
0

我正在工作一個簡單的表單驗證,我有3個功能,我檢查輸入文本字段,選擇字段和2個單選按鈕。對於每個組我都有一個功能,所以有3個功能。jQuery返回多個函數不起作用

我已經測試了它自己的功能,他們正在工作。但是如果我在腳本的最後一起使用它們,那麼只有其中一個可以工作。

任何人都可以告訴我我需要做什麼嗎?

// Form validation 
$(function() { 
    function wz_validation() { 
     var ok = true; 

     $('input[validate="true"]').each(function() { 
      if($(this).val() == '') { 
       ok = false; 
       $(this).addClass('red_border'); 
      } 
      else $(this).removeClass('red_border'); 
     }); 

     return ok; 
    } 

    // Check Bank select box on checkout page 
    function wz_val_select() { 
     if($(".payment select")) { 
      if($(".payment select option:selected").val() == "") { 
       $(".payment select").addClass('red_border'); 
       return false; 
      } 
      else{ 
       $(".payment select").removeClass('red_border'); 
       return true; 
      } 
     } 
    } 

    function wz_radio_shipping() { 
     var form = $("#shipping_form"); 
     if(form.length) { 
      if(form.find('input[name=wz_shipping]:checked').length == 0) { 
       $("#checkout_shipping").addClass('red_border'); 
       return false; 
      } 
      else{ 
       $("#checkout_shipping").removeClass('red_border'); 
       return true;  
      } 
     } 
    } 

    var wz_form = $('#wz_form1, #wz_form2, #wz_form3, #wz_form7'); 

    $(wz_form).submit(function() { 
     return wz_validation() && wz_radio_shipping() && wz_val_select(); 
    }); 
}); 
+0

檢查了這一點:HTTP:/ /api.jquery.com/deferred.then/ - 您可能必須先加載另一個。 – MarkP

回答

4

&&short circuit運營商。當a是假的時,它可以防止在a && bb的評估。

如果要使所有三個函數都被調用,即使其中一些函數返回false,並且只返回布爾值,請使用&。作爲&使得01,你可能需要將結果轉換爲布爾與!!

return !!(wz_validation() & wz_radio_shipping() & wz_val_select()); 

您可能還需要更明確地寫:

$(wz_form).submit(function(e) { 
    var good = true; 
    good &= wz_validation(); 
    good &= wz_radio_shipping(); 
    good &= wz_val_select(); 
    if (!good) e.preventDefault(); 
}); 
+0

對於我們這些沒有意識到這一點的人(如我自己)來說,使用Javascript:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators?redirectlocale = en-US&redirectslug = JavaScript%2FReference%2FOperators%2FBitwise_Operators#.26_%28Bitwise_AND%29 – Mark

+0

好的,但問題是,如果我使用「&」功能做那裏的工作,並給我的錯誤,但表單總是提交。所以我把函數放在if語句中,並說:if(functions&..&)返回true,否則返回false。但現在形式永遠不會提交.. – Robbert

+0

隨着你上次的編輯,我得到了同樣的問題。這些職能完成他們的工作,但我不能再提交。 – Robbert