2016-01-30 92 views
1

我使用jQuery驗證插件來驗證html頁面上的輸入數量。名字始終是必需的,無論是電子郵件還是手機,但不是兩者兼而有之。爲此,我使用require_from_group_exact方法。jQuery驗證與'require_from_group_exact'驗證輸入之前的任何輸入不正確驗證

當輸入順序,確認完全發生:如果換成輸入各地,(名字)不正確出現一次輸入的驗證

<form> 
    Email: <input class="commsinfo" name="email"><br> 
    Mobile: <input class="commsinfo" name="mobile"><br> 
    Name: <input name="firstname"><br> 
    <input type="submit"> 
</form> 

但是(你必須輸入一個名字然後刪除它來觸發驗證) - 爲什麼?。這是我想要解決的期望順序和問題 - 是jQuery驗證插件還是我的代碼的錯誤?

<form> 
    Name: <input name="firstname"><br> 
    Email: <input class="commsinfo" name="email"><br> 
    Mobile: <input class="commsinfo" name="mobile"><br> 
    <input type="submit"> 
</form> 

我創建的不正確驗證版本JSFiddle。可以在小提琴中看到jQuery.validator.addMethod和$('form')。validate的代碼。

回答

1

你不檢查所有輸入字段,

變化var fields = $(selector, element.form);

var fields = $('form :input');

Updated Fiddle

+0

我想我誤解了'valid()'的作用。我的印象是,它只是返回了一個表示表單有效性的值,沒有其他值。我想我錯了。 – Yass

1

在您提供的示例中,對fields.valid()的調用似乎存在問題。

我更新了小提琴,刪除了一些我認爲不需要的代碼。對valid()的呼叫似乎是問題的癥結所在,將其刪除會導致驗證按預期工作。

更新的代碼現在看起來是這樣的:

jQuery.validator.addMethod("require_from_group_exact", function(value, element, options) { 
    var validator = this; 
    var selector = options[1]; 
    var validOrNot = $(selector, element.form).filter(function() { 
    return validator.elementValue(this); 
    }).length == options[0]; 

    return validOrNot; 
}, jQuery.format("Please fill {0} of these fields.")); 

$('form').validate({ 
    rules: { 
    firstname: { required: true }, 
    email: { require_from_group_exact: [1, ".commsinfo"] }, 
    mobile: { require_from_group_exact: [1, ".commsinfo"] }, 
    } 
}); 

Updated Fiddle

+0

不起作用,請嘗試提交空白表單並輸入電子郵件的值。移動消息不會消失。 – TheOnlyError

+0

是的,你說得對。我沒有意識到。您的解決方案是最合適的。 – Yass

+0

驗證按預期工作,但是一旦顯示錯誤消息,應在鍵入有效數據時將其刪除。例如,提交空白電子郵件和移動設備會導致錯誤。當您開始輸入電子郵件時,移動消息應該消失。我認爲這是@TheOnlyError刪除代碼段的結果。 – RobAshton

0

每次調用

 
fields.valid(); 

您的驗證方法被調用,所以你得到了明顯奇怪的行爲。你可以自己檢查這個調試。