2012-02-26 23 views
3

我在编码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); 
    }; 
});​ 
+0

我不知道ansawer到你的问题,但是这是什么:所以当它被传递为0

你可以将其更改为上面的语句总是设置分钟至1声明如果(!〜$ .inArray(名称,名称)){看起来intersting!〜从未见过它在 – ONYX 2012-02-26 11:27:10

+0

+1之前用于包含jsFiddle。 – halfer 2012-02-26 11:31:00

+0

** @ KDM **与if($ .inArray(name,names)!== -1)相同' – elclanrs 2012-02-26 11:32:49

回答

1

这是因为这种逻辑的:

min = min || 1; 

在JavaScript 0的计算结果为假。

min = (typeof min == 'undefined') ? 1 : min; 
+0

哦,男人,你是对的,错过了!回到基础......现在的问题是,我仍然得到菜单,每当我检查一个选项时,数字就会变成负数。我必须在另一个地方放置另一个“if”。我很累,我只看到斑点而不是角色。 – elclanrs 2012-02-26 11:31:13

+0

这是什么意思!〜 – ONYX 2012-02-26 11:32:50

+0

@KDM是什么意思? – Jivings 2012-02-26 11:36:24