2012-09-20 18 views
0

如何檢查最大值時禁用一組單選按鈕?在我的例子中,我希望允許最多2個單選按鈕被選中,當選中2時,則禁用其餘選項。jquery禁用收音機組,如果MAX檢查

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     var MAX=2;    
    }); 
</script> 

<form> 
<div> 
<ul> 
    <li><input type="radio" class="rbutton" name="radio[]" value="1" /></li> 
    <li><input type="radio" class="rbutton" name="radio[]" value="2" /></li> 
    <li><input type="radio" class="rbutton" name="radio[]" value="3"/></li> 
    <li><input type="radio" class="rbutton" name="radio[]" value="4" /></li> 
</ul> 
</div> 
</form> 
+2

只有一個單選按鈕可以根據您的HTML來選擇。要麼給他們不同的名字,要麼讓他們成爲複選框。單選按鈕的全部要點只是選擇一個。 – j08691

+0

好吧,所以假設我使用type =「複選框」,而我仍然需要Jquery部分的幫助,請 – Ered

回答

3

你應該使用複選框代替

HTML

<ul> 
    <li><input type="checkbox" class="rbutton" name="radio[]" value="1" /></li> 
    <li><input type="checkbox" class="rbutton" name="radio[]" value="2" /></li> 
    <li><input type="checkbox" class="rbutton" name="radio[]" value="3"/></li> 
    <li><input type="checkbox" class="rbutton" name="radio[]" value="4" /></li> 
</ul>​ 

SCRIPT

$(function() { 
    var $inputs = $('input.rbutton'); 
    $inputs.change(function() { 
     if ($('input.rbutton:checked').length == 2) { 
      $inputs.not(':checked').prop('disabled', true); 
     } else { 
      $inputs.prop('disabled', false); 
     } 
    }); 
});​ 

http://jsfiddle.net/D2QgX/

其實繼承人你如何能做到這沒有if/else語句

$(function() { 
    var $inputs = $('input.rbutton'); 
    $inputs.change(function() {  
      $inputs.not(':checked').prop('disabled', $('input.rbutton:checked').length == 2);  
    }); 
});​ 
+0

TX只是我在找什麼 – Ered

0

您將需要複選框,而不是單選按鈕。但是,這應該幫助,一旦你有一個名爲複選框「複選框[]」:

var $inputs = $('form input[type="checkbox"][name="checkbox\\[\\]"]'); 
$inputs.click(function() 
{ 
    if ($inputs.filter('*:checked').length >= MAX) 
    { $inputs.attr('disabled','disabled'); } 
    else 
    { $inputs.removeAttr('disabled');  } 
}); 
+0

這是行不通的 – Ered

+0

我把它從我的工作代碼。我只是將它包裝在一個事件處理程序中。我很抱歉,我認爲你會把這個代碼放在一個「點擊」處理程序中。 – jimp

0

給予同樣的名字實際上打亂它,你可以不選擇具有相同的名稱..嘗試給予不同的名稱不止一個單選按鈕您的單選按鈕..或全部使用複選框..

<li><input type="radio" class="rbutton" name="radio[1]" value="1" /></li> 
    <li><input type="radio" class="rbutton" name="radio[2]" value="2" /></li> 
    <li><input type="radio" class="rbutton" name="radio[3]" value="3"/></li> 
    <li><input type="radio" class="rbutton" name="radio[4]" value="4" /></li> 
1

確保你改變你的類型type="checkbox"要禁用按鈕,只需將禁用屬性添加到元素。這段代碼有訣竅。

MAX = 2; 

$('.rbutton').click(function(){ 
    var checked = []; 
    $('.rbutton').each(function(){ 
    $(this).removeAttr('disabled'); 
    if($(this).is(':checked')) 
     checked.push(this); 
    }); 
    if(checked.length == MAX) 
    $('.rbutton').each(function(){ 
     if($.inArray(this, checked) == -1) 
      $(this).attr({disabled:'disabled'}); 
     }); 
});​ 

一個複選框被選中的任何時間,它計算所有選中的複選框,如果該計數等於最大值,它禁用所有的人。它還允許您取消選中,並重新啓用它們。 See it working here.

+0

禁用所有複選框。 OP表示「在檢查2個時,禁用其餘部分」,而不是全部禁用它們。 – j08691

+0

@ j08691 - 好吧。感謝您指出了這一點。 :) – Aust

2

試試這個jsFiddle example

var MAX = 2; 
$('input.rbutton').click(function() { 
    ($('input.rbutton:checked').length == MAX) ? $('input.rbutton').not(':checked').attr('disabled',true):$('input.rbutton').not(':checked').attr('disabled',false); 
});​ 
相關問題