选择另一个时取消选中单选按钮 - 不在IE中工作

时间:2014-05-02 04:08:49

标签: javascript html

有2个主要的单选按钮(opt1和opt2)。 opt1有3个子单选按钮。我需要做的是当选择opt1时什么都不应该发生但是当选择opt2时,应该取消选中名为“main_sub”的单选按钮。

我已尝试过以下代码,在Firefox中运行正常,Chrome不在IE中运行。

HTML:

<div class="field">
                  <label>Radio button
                 </label>
                  <table width="60%" border="0" cellspacing="0" height="100%" cellpadding="0">
                    <tr>
                      <td><input type="radio" name="main"  id="main" value="Yes" />
                    Opt1 </td>
                    </tr>
                    <tr>
                      <td id="show"  style="padding-left:25px; width:200px; padding-top:5px;  line-height:20px;"><input type="radio" name="main_sub" id="main_sub" value=""  />
                        sub Opt1<br>
                        <input type="radio" name="main_sub"  id="main_sub" value=""  />
                        sub Opt2<br>
                        <input type="radio" name="main_sub"  id="main_sub" value=""  />
                        sub Opt2<br>
                      </td>
                    </tr>
                  </table>

                  <table align="center"  width="100%" border="0" cellspacing="0" height="100%" cellpadding="0">
                    <tr>
                      <td align="center" style="padding-right:60px;" ><input type="radio" name="main"  id="main" value="No" />
                        Opt2</td>
                    </tr>
                  </table>
                </div>

JS:

document.getElementById("main2").addEventListener("change", function(){
    if (this.checked) {
        var subs_list = document.getElementsByName("main_sub");
        var subs = Array.prototype.slice.call(subs_list);
        subs.forEach(function(sub){
            sub.checked = false;
        });
    }
});

var subs_list_2 = document.getElementsByName("main_sub");
var subs_2 = Array.prototype.slice.call(subs_list_2);
subs_2.forEach(function(sub){
    sub.addEventListener("change", function(){
        if (this.checked) {
            document.getElementById("main2").checked = false;
            document.getElementById("main").checked = true;
        }
    });
});

2 个答案:

答案 0 :(得分:1)

我不确定addEventListener是否适用于IE,对于IE,您可能想使用attachEvent。 IE11支持addEventListener,因此如果您使用旧版本的IE或任何用户,则使用attachEvent..refer到这些网站..

http://msdn.microsoft.com/en-us/library/ie/ms536343(v=vs.85).aspx

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener

答案 1 :(得分:0)

只是评论,使用答案,以便我可以正确格式化。

你在哪里:

    var subs = Array.prototype.slice.call(subs_list);
    subs.forEach(function(sub){
        sub.checked = false;
    });

第一行将在IE 8中失败并降低,因为它不会容忍主机对象作为 this 传递给内置函数。此外,上面的内容实际上比更强大的替代循环更多:

for (var i=0, iLen=subs_list.length; i<iLen; i++) {
  subs_list[i].checked = false;
}