除非选择单选按钮,否则如何使复选框变灰?

Posted

技术标签:

【中文标题】除非选择单选按钮,否则如何使复选框变灰?【英文标题】:How to grey out checkbox unless radio button is selected? 【发布时间】:2012-09-23 14:09:52 【问题描述】:

javascript 非常陌生,但如果能帮助我入门,我们将不胜感激。我有一个简单的表格:

<div><input type="radio" name="o1" id="burger" />Burger</div>
<div id="yesFries"><input type="checkbox" name="e1" id="fries" />Fries with that?</div>
<div><input type="radio" name="o1" id="pizza" />Pizza</div>
<div><input type="radio" name="o1" id="hotdog" />Hot Dog</div>

除非选中“汉堡”单选按钮,否则我希望“薯条”复选框呈灰色显示。我不确定 Javascript 或 CSS 是否是最好的方法。提前致谢!

【问题讨论】:

但我只想要薯条。 :( 【参考方案1】:

您要做的是将元素设置为禁用,直到单选的状态发生变化,这将使用 javascript 完成,然后您将在单选按钮的 onchange 中添加/删除禁用的类。

您正在考虑使用哪些 JavaScript 库? jQuery 会让这变得相当简单。

$('#burger').change( function () 
    if ($('#burger').checked() ) 
        $('#fries').removeClass('disabled');
     else 
        $('#fries').addClass('disabled');
    
);

【讨论】:

【参考方案2】:

实际上,您可以使用一点 CSS3 来模拟一个非常简单的解决方案。 在这里,我们不会将按钮变灰,但仅在选中复选框时才使其可见。 但是,我们也可以在这个例子的基础上使用更多的 CSS 将其变灰。 您将始终需要考虑您想要提供什么样的支持。 但是,如果您可以在现代浏览器上使用它,那就试试吧。

这是 html

<label>
    <input type="checkbox" name="test" />
    <span>I accept terms and cons</span><br><br>
    <button>Great!</button>
</label>

这是 CSS

button  display: none
:checked ~ button 
    font-style: italic;
    color: green;  
    display: inherit;

这是 DEMO http://jsfiddle.net/DyjmM/

【讨论】:

【参考方案3】:

我注意到您没有指定是否可以使用 jQuery。如果这是一个选项,请参阅我强烈推荐的其他帖子之一。

如果您不能使用 jquery,请尝试以下操作:

<script>
  function setFries()
    var el = document.getElementById("burger");
    if(el.checked)
      document.getElementById("fries").disabled = false;
    else
     document.getElementById("fries").disabled = true;    
    
</script>


<div><input type="radio" name="o1" id="burger" onchange="setFries();"/>Burger</div>
<div id="yesFries"><input type="checkbox" name="e1" id="fries" disabled="disabled"/>Fries with that?</div>
<div><input type="radio" name="o1" id="pizza" onchange="setFries();"/>Pizza</div>
<div><input type="radio" name="o1" id="hotdog" onchange="setFries();"/>Hot Dog</div>​

jsFiddle上的简单示例

【讨论】:

谢谢,这正是我所需要的!我似乎通过工作代码学会了更好的选择。 你应该用 Jquery 回答我们这些使用它的人。 @KolobCanyon 这里还有其他答案显示了使用 jQuery 的类似功能。鉴于 OP 特别要求 JavaScript 解决方案,这个答案就足够了。如果您有任何问题,我很乐意帮助您在 jQuery 中执行此操作。我承认 - 回顾一下,我不会使用内联事件处理程序。想法是一样的,但是如果你这样做,请使用事件绑定/委托...【参考方案4】:

如果您正在使用jQuery,这是一个非常易于使用的 Javascript 库(我强烈建议初学者使用),您可以通过将一些代码添加到您的页面包含:

$(function()
    $("#burger").change(function() 
        if ($(this).is(':checked')) $("#fries").removeAttr("disabled");
        else $("#fries").attr("disabled", true);
    );
);

这段代码做了三件事:

#burger 上监听change 事件。 发生变化时,执行提供的function。 在该函数中,将#friesdisabled 属性设置为#burgerchecked 属性。

【讨论】:

【参考方案5】:

使用 JQuery

$().ready(function() 
  var toggleAskForFries = function() 
    if($('#burger').is(':checked')) 
      $('#yesFries').show()
    else
      $('#yesFries').hide()
    
    return false
  
  toggleAskForFries()
  $('#burger').change(toggleAskForFries)

【讨论】:

【参考方案6】:

使用 jQuery:http://jsfiddle.net/kboucher/cMcP5/(还为您的标签添加标签)

【讨论】:

【参考方案7】:

不用任何函数库也可以试试这个

<input type="checkbox" name="e1" id="fries" disabled />

JS

window.onload=function()
    var radios=document.getElementsByName('o1');
    for(i=0;i<radios.length;i++) radios[i].onclick=checkFire;
;

function checkFire(e)

    var fires=document.getElementById('fries');
    var evt=e||window.event;
    var target=evt.target||evt.srcElement;
    if(target.checked && target.id==='burger') fires.disabled=false;
    else 
    
        fires.checked=false;
        fires.disabled=true;
    

DEMO.

【讨论】:

以上是关于除非选择单选按钮,否则如何使复选框变灰?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置单击特定单选按钮时所需的选择表单?

javascript中的单选按钮验证

如何使复选框的行为类似于角度 6 中的单选按钮?

winform dataGridView中如何添加单选按钮列?

如何链接一组切换按钮,如单选按钮?

java单选按钮传值