Я кодирую этот плагин , который проверяет, если для ряда групп флажков отмечены по крайней мере 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);
};
});