2013-10-17 60 views
2

我已經對兩個輸入字段進行了分組,以便它只顯示一條錯誤消息,而不管有多少個輸入字段無效。jQuery驗證:顯示組錯誤消息,直到所有字段都正確

如果我將它們都留空並嘗試提交表單,只要我輸入任何內容到錯誤消息中,就會出現問題。如果我選擇並取消選擇空的輸入字段,它會再次出現。

我想要的是隻要一個或多個輸入字段無效,錯誤消息就會保留。並且在填寫兩個空輸入字段中的一個時防止錯誤消息消失。

這裏是我的代碼:

HTML

<form> 
    <div> 
     <label for="fname">First Name</label> 
     <input name="fname" id="fname" class="required"> 
    </div> 
    <div> 
     <label for="lname">Last Name</label> 
     <input name="lname" id="lname" class="required"> 
    </div> 
    <input type="submit" /> 
</form> 

的Javascript

$("form").validate({ 
    groups: { 
     name: 'fname lname' 
    }, 

    errorPlacement: function (error, element) { 
     if (element.attr('name') == 'fname' || element.attr('name') == 'lname') 
      error.insertAfter('#lname'); 
    } 
}); 

並有JSFiddle

謝謝!

回答

5

報價OP:

「如果我離開他們兩個空,並嘗試提交表單時我的問題 - 只要我輸入任何東西到他們的錯誤信息消失之一,它再次出現。如果我選擇並取消選擇空的輸入字段。「

是的,你已經將兩個錯誤消息合併爲一個。因此,只要活動字段的條件滿足,消息就會清除。你不能讓它也符合第2場的條件,但它需要準確地遵循場#1的條件......它只需一次處理它們。

報價OP:

「我想是的錯誤消息,只要保持一個或多個輸入字段是無效的,並防止消失時,一個錯誤消息。兩個空的輸入字段被填寫。「

只要您使用groups選項,它的工作原理與設計完全一樣。

groups選項是專門爲某些方法設計的,如require_from_group,當您希望填充一組元素中的一個元素時,您不需要在每個元素上看到重複的相同消息。 groups允許您爲這組字段使用單個消息。 (這是一個單一的消息對應於條件,但是,你要做出一個消息符合多個條件。)

也許你會想使用showErrors函數。

像這樣的東西(相應調整):

$("form").validate({ 
    showErrors: function (errorMap, errorList) { 
     $("#summary").html("Your form contains " + this.numberOfInvalids() + " errors:"); 
     this.defaultShowErrors(); 
    }, 
    errorPlacement: function() { 
     return false; // <- kill default error labels 
    } 
}); 

DEMO:http://jsfiddle.net/wdDtR/

而另一個版本扭捏表現更像是原來的:

$("form").validate({ 
    showErrors: function (errorMap, errorList) { 
     $("#summary").html("field is required"); 
     if (this.numberOfInvalids() > 0) { 
      $("#summary").show(); 
     } else { 
      $("#summary").hide(); 
     } 
    }, 
    errorPlacement: function() { 
     return false; // <- kill default error labels 
    } 
}); 

DEMO :http://jsfiddle.net/wdDtR/3/