我在編碼this插件驗證一系列複選框組是否至少有x
選項已選中。
每個複選框組被命名爲與name
屬性像需要關於此邏輯的建議...找不到更好的標題
<input type="checkbox" name="group[]"> // Where `[]` identifies it as a group
和插件被稱爲像這樣:
/* Grab all checkboxes and make sure
at least 2 are checked in every group */
$(':checkbox').checkpass(2);
如果您嘗試插件在http://jsfiddle.net/elclanrs/GFCKA/你會發現每一次你嘗試驗證,一個警報將出現你需要檢查每個組剩餘的選項數量。當所有條件都滿足時,消息不會再觸發。你會得到「通過!」警報。
插件工作正常,如果傳遞的值大於一個,但是當我通過零值問題就來了:
$(':checkbox').checkpass(0)
如果最低設定爲零仍然抓住的min = 1
默認值所以它的行爲就好像通過的值是1
。這是爲什麼發生?下面是實際的插件:
(function($) {
$.fn.checkpass = function(min) {
var $ckboxes = this,
names = [],
num = 0,
err = '';
$ckboxes.each(function() {
var name = this.name;
if (!~$.inArray(name, names)) {
names.push(name);
}
});
min = min || 1;
for (var i = 0, l = names.length; i < l; i++) {
$checked = $ckboxes.filter('[name="' + names[i] + '"]:checked');
if ($checked[min - 1]) {
num++;
} else {
var _remaining = min - $checked.length,
_name = names[i].match(/\w+/).toString()
.replace(/^\w/, function($0) {
return $0.toUpperCase();
});
err += _name + ': Check ' + _remaining + ' more\r\n';
}
}
return {
isValid: num === names.length,
errors: err
};
};
})(jQuery);
// Test
$('button').click(function() {
var checkpass = $(':checkbox').checkpass(3);
if (checkpass.isValid) {
alert('Passed!');
} else {
alert(checkpass.errors);
};
});
我不知道ansawer到你的問題,但是這是什麼:所以當它被傳遞爲0
你可以將其更改爲上面的語句總是設置分鐘至1聲明如果(!〜$ .inArray(名稱,名稱)){看起來intersting!〜從未見過它在 – ONYX 2012-02-26 11:27:10
+1之前用於包含jsFiddle。 – halfer 2012-02-26 11:31:00
** @ KDM **與if($ .inArray(name,names)!== -1)相同' – elclanrs 2012-02-26 11:32:49