2009-12-29 32 views
4

我試圖做這個工作; 該驗證應用到支付的形式,你可以看到,只有3個requierd輸入,當且僅當用戶是否是關於與比信用卡別的東西要需要JQuery驗證插件方法(依賴表達式)使用正常但回調不起作用

input[type=radio]:checked').val() != "CB"; 

至極手段。 以下是驗證表單的完整代碼。

$("#paiement").validate({ 
     errorClass: "invalid", 
     validClass: "success", 
     rules: { 
      referenceTypeComplementBancaire: true, 
      banque: { 
       required: function(nomBanque){ 
        return $('#paiement input[type=radio]:checked').val() != "CB"; 
       } 
      }, 
      numeroComplementBancaire: { 
       required: function(numeroCompl){ 
        return $('#paiement input[type=radio]:checked').val() != "CB"; 
       } 
      }, 
      montantComplementBancaire: { 
       required: function(montantCompl){ 
        var logg = montantRentre >= panierTotal; 
        console.log(logg); 
        return montantRentre >= panierTotal; 
       } 
      } 
     }, 
     messages: { 
     referenceTypeComplementBancaire: "", 
     banque:"", 
     numeroComplementBancaire:"", 
     montantComplementBancaire:"" 
     } 
    }); 
} 

沒什麼難的,真的。 但是,我很難理解的是,爲什麼montantComplementBancaire未被驗證,即使我的控制檯日誌記錄在正確的時間顯示爲'true'或'false'。 我做錯了什麼?

----------------------------編輯----------------- -------------------------

我覺得有一些誤解,我的錯。抱歉的人。 下面是表格最終的樣子:

 $("#paiement").validate({ 
     errorClass: "invalid", 
     validClass: "success", 
     rules: { 
      referenceTypeComplementBancaire: true, 
      banque: { 
       required: function(nomBanque){ 
        return $('#paiement input[type=radio]:checked').val() != "CB"; 
       } 
      }, 
      numeroComplementBancaire: { 
       required: function(numeroCompl){ 
        return $('#paiement input[type=radio]:checked').val() != "CB"; 
       } 
      }, 
      montantComplementBancaire: { 
       required: function(){ 
        var logg = panierTotal > montantRentre; 
        console.log(logg); 
        return panierTotal > montantRentre; 
       } 
      } 
     }, 
     messages: { 
     referenceTypeComplementBancaire: "", 
     banque:"", 
     numeroComplementBancaire:"", 
     montantComplementBancaire:"" 
     } 
    }); 

我哪裏出錯了?我不僅希望「montantComplementBancaire」得到驗證,但我希望它是有效的IF和ONLY如果其> =到panierTotal

現在,我只測試是否驗證它,但我什麼'尋找是一種方式來返回'有效'當montantRentre> = panierTotal。

我是否讓tjis更清晰?

+1

你使用的是什麼jQuery驗證插件? – 2009-12-29 13:49:42

+1

JörnZaefferer的,可在http://bassistance.de/jquery-plugins/jquery-plugin-validation/。 – pixelboy 2009-12-29 14:03:24

+1

也許我沒有正確理解你的問題,但你的代碼似乎在預期的工作:http://jsbin.com/ofuci(可通過http://jsbin.com/ofuci/edit編輯) – brianpeiris 2009-12-30 18:28:09

回答

2

嘗試return logg;return (montantRentre >= panierTotal);

您的代碼看起來不錯,似乎這裏匹配的例子(http://docs.jquery.com/Plugins/Validation/Methods/required#dependency-callback)。 required屬性不需要是具有depends屬性的對象,它可以像您所做的那樣是一種依賴回調函數。

您也可以嘗試

if(montantRentre >= panierTotal) { 
    return true; 
} else { 
    return false; 
} 
+0

return logg;返回「真」或「假」;至於返回(montantRentre> = panierTotal);這是我的問題;看起來它永遠不會返回true。 – pixelboy 2009-12-31 06:08:12

2

我不認爲你的驗證是正確安裝。每個表單元素的「required」屬性應該是一個JavaScript對象,並將「depends」屬性設置爲一個函數,假設您要做的是條件需求。請參閱驗證選項頁面上的「規則」條目:http://docs.jquery.com/Plugins/Validation/validate#toptions

我認爲固定的代碼將是:

$("#paiement").validate({ 
    errorClass: "invalid", 
    validClass: "success", 
    rules: { 
      referenceTypeComplementBancaire: 'required', 
      banque: { 
        required: { 
         depends: function(nomBanque){ 
          return $('#paiement input[type=radio]:checked').val() != "CB"; 
         } 
        } 
      }, 
      numeroComplementBancaire: { 
        required: { 
         depends: function(numeroCompl){ 
          return $('#paiement input[type=radio]:checked').val() != "CB"; 
         } 
        } 
      }, 
      montantComplementBancaire: { 
        required: { 
         depends: function(montantCompl){ 
          var logg = montantRentre >= panierTotal; 
          console.log(logg); 
          return montantRentre >= panierTotal; 
         } 
        } 
      } 
    }, 
    messages: { 
    referenceTypeComplementBancaire: "", 
    banque:"", 
    numeroComplementBancaire:"", 
    montantComplementBancaire:"" 
    } 
    }); 
} 
+3

我認爲你誤解了'depends'選項。它並不意味着與'required'結合使用。 'depend'選項用於禁用或啓用更復雜的規則,例如'email','remote'或'equalTo'。如果不是不正確的話,與'required'一起使用是多餘的。 – brianpeiris 2009-12-30 22:15:55

1
required: function(montantCompl){ 
    var logg = montantRentre >= panierTotal; 
    console.log(logg); 
    return montantRentre >= panierTotal; 
} 

爲什麼你定義的參數function(montantCompl){,你從來沒有使用?你是不是真的想和你做比較?即使你沒有,在匿名函數中使用全局變量進行比較也不是一個好主意,因爲它會導致模糊性,就像現在當我試圖幫助你解決問題一樣。如果這些值是在某個地方定義的,請將它們包括在您的問題中,包括它們改變狀態的任何點。

相關問題