2012-02-26 21 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