1

我试图在选中其中一个复选框时隐藏一组复选框,并在未选中时让它们重新出现。条件必须基于它们的值

var input = document.getElementsByTagName("input");

for(i=0;i<input.length;i++){


input[i].onchange = function(){
    if(this.checked){
var value = $(this).val();
$("input[type=checkbox]:not(." + '60' + ")").hide();
$("input[type=checkbox]." + '60').show();
}
  }
     }

要隐藏的复选框组属于值 60 和 90(不能选择两个武器配件),想法是不能选择两个复选框,只有一个,所以这就是为什么我需要隐藏其中一个' 被选中,并让它们在未选中后重新出现。

        <input type="checkbox" value="50" /> conductive plastic foot cup $50<br/>
        <input type="checkbox" value="60" /> <a>T-arms 2 $60</a><br/>
        <input type="checkbox" value="90" /> <a>T-arms 1 $90</a><br/>
        <input type="checkbox" value="80" /> metal rails $80<br/>
        <input type="checkbox" value="30" /> plastic rails $30<br/>
        <input type="checkbox" value="70" /> foot rest ring $70<br/>
        <input type="checkbox" value="120" />plastic five star foot $120 <br/>

这是我的小提琴:JS fiddle

4

2 回答 2

2

我建议使用以下 jQuery:

$('.arms').change(
    function(){
        $('.arms').not(this).prop('disabled',this.checked);
    });

再加上修改后的 HTML:

<input id="check1" type="checkbox" value="50" />
<label for="check1">conductive plastic foot cup $50</label>
<input id="check2" type="checkbox" value="60" class="arms" />
<label for="check2">T-arms 2 $60</label>
<input id="check3" type="checkbox" value="90" class="arms" />
<label for="check3">T-arms 1 $90</label>
<input id="check4" type="checkbox" value="80" />
<label for="check4">metal rails $80</label>
<input id="check5" type="checkbox" value="30" />
<label for="check5">plastic rails $30</label>
<input id="check6" type="checkbox" value="70" />
<label for="check6">foot rest ring $70</label>
<input id="check7" type="checkbox" value="120" />
<label for="check7">plastic five star foot $120</label>

JS 小提琴演示

以上使用label带有for属性(或属性)的元素将文本与相关的checkbox.

我已将 a 添加classinput互斥的 s 中,以便使用选择器轻松定位它们,该选择器根据是否选中或未选中来设置其他元素(或添加更多互斥的元素)的disabled属性, 元素被选中或未选中。checkboxes

顺便说一句,通常最好禁用表单字段,而不是删除/隐藏它们,这样如果用户意外点击,他们不会想知道另一个选项去了哪里,或者当它突然重新出现时感到惊讶。

但是,如果您真的想显示/隐藏“其他”元素,则可以使用以下内容:

$('.arms').change(
    function(){
        $('.arms').not(this).add($(this).next())[this.checked ? 'hide' : 'show']();
    });

JS 小提琴演示

或者您甚至可以使用第一种方法(使用prop('disabled',this.checked))和以下 CSS(在实现:disabled伪选择器的兼容浏览器中:

input:disabled,
input:disabled + label {
    display: none;
}

JS 小提琴演示

参考:

于 2013-02-04T14:27:33.913 回答
1

我喜欢对data这类东西使用属性:

HTML

<input type="checkbox" value="50" /> conductive plastic foot cup $50<br/>
<input type="checkbox" value="60" data-exclude="input[value=90]" /> T-arms 2 $60<br/>
<input type="checkbox" value="90" data-exclude="input[value=60]" /> T-arms 1 $90<br/>
<input type="checkbox" value="80" /> metal rails $80<br/>
<input type="checkbox" value="30" /> plastic rails $30<br/>
<input type="checkbox" value="70" /> foot rest ring $70<br/>
<input type="checkbox" value="120" />plastic five star foot $120 <br/>

JavaScript

var input = document.getElementsByTagName("input");

$('input').each(function() {
    var $input = $(this);
    $input.change(function() {
        var $exclude = $($input.data('exclude'));
        $exclude.toggle(! $input.is(':checked'));
    });
});

现场演示

http://jsfiddle.net/bikeshedder/2H5kB/10/

顺便提一句。我宁愿禁用复选框而不是隐藏它。

于 2013-02-04T14:26:05.173 回答