jQuery plugin: Validation 是一套很讚的表單前端驗證工具,但少了「群組不可有重複值」這項驗證有些可惜。
什麼時候會用到呢?舉個例來說,表單希望你填入親友A、親友B與親友C 三者的 E-mail,但我們又不希望使用者通通填同一個 E-mail,這時三個欄位就為一個 E-mail 群組,並希望每欄皆為獨立值。
幸好有熱心高手寫了 Validation 的 plugin,可以加掛這項驗證上去,以下來說明怎麼做吧。
原始網址在此
- 假設您已經加入了
jQuery
與jquery.validate.js
,我們接著加入以下的 code:其中 Please enter a Unique Value 是錯誤提示的訊息。
jQuery.validator.addMethod("notEqualToGroup", function(value, element, options) { // get all the elements passed here with the same class var elems = $(element).parents('form').find(options[0]); // the value of the current element var valueToCompare = value; // count var matchesFound = 0; // loop each element and compare its value with the current value // and increase the count every time we find one jQuery.each(elems, function() { thisVal = $(this).val(); if (thisVal === valueToCompare) { matchesFound++; } }); // count should be either 0 or 1 max if (this.optional(element) || matchesFound <= 1) { elems.removeClass('error'); return true; } else { elems.addClass('error'); } }, jQuery.format("Please enter a Unique Value."));
- 表單中需設置為群組的欄位,請都加上
distinctemails
這個 classname ,當然,這個名稱是可以依需求更改的。<input type="text" name="email1" class="distinctemails" /> <input type="text" name="email2" class="distinctemails" /> <input type="text" name="email3" class="distinctemails" />
- 在
validation
的rules
中加入:email1: { email: true, notEqualToGroup: ['.distinctemails'] }, email2: { email: true, notEqualToGroup: ['.distinctemails'] }, email3: { email: true, notEqualToGroup: ['.distinctemails'] }
我們加上 notEqualToGroup
這個驗證方法,並指定識別為 distinctemails
,也就是步驟 2 中指定的 classname。
如此我們便能對這三欄 E-mail 做出不重複值的檢查了。