2014-08-29 102 views
0

我有幾個複選框,其中一些複選框已在頁面加載時進行檢查。選中限制複選框,包含在頁面加載時檢查的框

我想要做的是禁用其他複選框,如果2框被選中。

我的代碼工作正常,如果我檢查/取消選中框自己。但是當2個盒子在頁面加載時已經被檢查(使用javascript或者HTML)時,其他盒子仍然可以被檢查直到盒子被禁用。

由於已在頁面加載中檢查了2個框,因此應取消選中其他複選框,直到取消選中其中一個複選框。目前情況並非如此。

這是我的javascript:

jQuery(function($) { 

var max = 2; 
var checkboxes = $('input[type="checkbox"]'); 

    checkboxes.change(function(){ 
     var current = checkboxes.filter(':checked').length; 
     checkboxes.filter(':not(:checked)').prop('disabled', current >= max); 
    }); 

    $('.one').attr('checked','checked'); 
    $('.two').attr('checked','checked'); 

}); 

肚裏我下面的複選框:

 <div id="checkboxes"> 
       <input type="checkbox" class="1" id="checkbox" name='Some[array]' value="1"> 
       <input type="checkbox" class="2" id="checkbox" name='Some[array]' value="2"> 
       <input type="checkbox" class="3" id="checkbox" name='Some[array]' value="3"> 
       <input type="checkbox" class="4" id="checkbox" name='Some[array]' value="4"> 
     </div> 

回答

2

剛剛火了.change()事件在頁面加載時:

checkboxes.change(function() { 
    var current = checkboxes.filter(':checked').length; 
    checkboxes.filter(':not(:checked)').prop('disabled', current >= max); 
}).change(); 

jsFiddle example

+0

是的,這是一個比我的絕對更好的解決方案。 – Ohgodwhy 2014-08-29 16:45:51

+0

完美,謝謝! – Dean 2014-08-29 17:11:58

1

您的選擇器錯誤,並且checked事件不會觸發,如果以編程方式更改該值。但是,您可以手動觸發更改事件,以便在初始設置值時強制您的代碼運行。使用下面兩行:

$('.1').prop('checked','checked').change(); 
$('.2').prop('checked','checked').change(); 
相關問題