2016-04-05 9 views
0

JavaScriptと条件チェックチェックボックスについては多くのトピックがありますが、私のケースに一致するものは見つかりませんでした。多くの1つのチェックボックスは常にチェックしないでおくべきです

私の使用例:各行にチェックボックス付きの行がいくつか生成されています。数字はnとしましょう。ユーザーはn-1しか確認できません。つまり、4つのチェックボックスがあり、3つのうちの3つがチェックされている場合は、最後のチェックボックスを無効にする必要があります。 4つのうちの2つだけがチェックされると、すべてのチェックボックスが利用可能になります。

私が試してみました:

var $checks = $('input:checkbox').click(function (e) { 
     var numChecked = $checks.filter(':checked').length; 
     var lastUnchecked = $checks.prop('checked', false); 

     if (numChecked = $checks.length - 1) { 
      lastUnchecked.disabled = true; 
     } 
     else { 
      //enable checkbox that was disabled before 
      lastUnchecked.disabled = false; 
     } 
    }); 

しかし、これは動作しませんので、var lastUnchecked = $checks.prop('checked', false);リターンのみチェックを外すないすべてのチェックボックス、

+2

あなたが実行可能なデモ/スニペットを共有することができますか[JSFiddle](https://jsfiddle.net/)? – Rayon

+1

論理が逆転しているようです。おそらく、ラジオボタンを使用して、ユーザーが**望まないアイテムを選択させることができます。 –

+1

この 'if(numChecked = $ checks.length - 1)'は代入であり、比較ではありません。 '=='は比較です – j08691

答えて

1

これを試してください。

ロジック:変更後、すべてのチェックボックスを有効または無効にします。チェックした数に基づいて、無効にする必要がある場合は、新たに把握してください。

var table = $('table'), cbs = $(':checkbox'); 
table.on('change', ':checkbox', function(evt) { 
    cbs.prop('disabled', false); 
    if (cbs.filter(':checked').length == cbs.length - 1) 
     cbs.not(':checked').prop('disabled', 1); 
}) 

Fiddle

1

たびにユーザーがそれらの1 checkesチェックした項目カウントしてみてください。

$(document).on('change', '.chk', function() { 
 
    var that = $(this); 
 
    var par = that.closest('ul'); 
 
    var max = par.find('.chk').length - 1; 
 
    var checked = par.find('.chk').filter(':checked').length; 
 
    if (checked < max) { 
 
    par.find('.chk').prop('disabled', ''); 
 
    } else { 
 
    par.find('.chk').not(':checked').prop('disabled', 'disabled'); 
 
    }    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<ul> 
 
    <li><input class="chk" type="checkbox" /> Checkbox</li> 
 
    <li><input class="chk" type="checkbox" /> Checkbox</li> 
 
    <li><input class="chk" type="checkbox" /> Checkbox</li> 
 
    <li><input class="chk" type="checkbox" /> Checkbox</li> 
 
    <li><input class="chk" type="checkbox" /> Checkbox</li> 
 
</ul>

0

これは簡単です

$(document).ready(function(){ 
    var numBox; 

    var $checks = $('input:checkbox').click(function (e) { 
     var numChecked = $checks.filter(':checked').length; 

     if (numChecked < numBox - 1) { 
     $checks.filter(':disabled').prop('disabled', false); 
     } else { 
     $checks.not(':checked').prop('disabled', true); 
     } 
    }); 

    numBox = $check.length; 
});