我在编码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