2010-06-26 238 views
2

valid()函數的狀態: 「檢查所選表單是否有效或所有選定元素是否有效。JQuery驗證插件:valid()對非必填字段返回false

這似乎暗示我們可以使用選擇器來測試一組控件(我們正在測試asp.net窗體上的控件),例如

$('div[id$=pnlBillingInfo] .Field input').valid() 

如果所有字段都是必需的,但是,如果一個字段不需要驗證(required = false),則當該字段留空時,valid()將返回false。

此行爲似乎不正確 - 我們錯過了什麼嗎?我們應該可以將這些可選字段留空,並且仍然可以驗證控件組是否正確。

如果我們嘗試驗證此可選字段 - 結果爲「未定義」,例如

$("#aspnetForm").validate().element('input[id$=txtBillingAddress2]') 

的jQuery 1.4.2

jQuery插件驗證1.7(最新版本)

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

謝謝!

+0

注意驗證(正在檢查有效的前稱爲()如 $('#aspnetForm')。validate(); $('div [id $ = pnlBillingInfo] .Field input')。valid() – Matt 2010-06-26 17:22:36

+0

如果沒有規則,結果將是未定義的,這是預期的行爲,此字段是否有* any *規則? – 2010-06-26 17:26:24

+0

定義了一個規則(必需= false)。它仍然有意義,validate()。元素返回未定義,因爲沒有什麼可以驗證。然而,真正的困惑是爲什麼valid()返回false。 – Matt 2010-06-26 23:07:53

回答

1

我發現實際上將表單驗證規則從驗證事件中分離出來(即:提交表單的那一刻)是非常有用的。

您需要設置規則的形式 - 無論是在JS或HTML通過每個輸入類/選擇/等

我希望通過JS做,因爲它使DOM清潔;同時,我通常把表單的規則$(文件)。就緒()函數之外:

$('#form').validate({ 
    rules: { 
     [...] 
    }, 
    messages: { 
     [...] 
    } 
}); 

這實際上什麼也不做的功能。它只是設定規則。 當你需要實際驗證表單,您可以通過燒成.valid()事件檢查這些規則:

$(document).ready(function(){ 
    $('#form').submit(function(){ 

      // Check validity 
      if (!$(this).valid()) return false; 

      // Form is valid, so submit it! 
      [...] 
    }); 
}); 
+0

這看起來不錯! – sbose 2013-09-06 07:54:36

0

有一個在庫中的缺陷時,規則方法檢查與可選字段「this.optional(元素)」 。當該字段爲空時,此選項返回「依賴不匹配」,並且驗證方法返回「未定義」,將該字段標記爲無效。這裏

充分說明:)

https://github.com/jzaefferer/jquery-validation/issues/481