选中/取消选中无线电

时间:2014-07-03 03:15:12

标签: javascript radio-button

制作此剧本

function Resetradio() {
var radios = document.getElementsByName("tjek");

var i = 0;
while (i < radios.length) {
    if (radios[i].checked) 
    selectedradio = i;
    i++;
}
var i = 0;
while (i < radios.length) {
    if (!selectedradio == i) 
    radios.checked = false
    i++;
}
}
<form name="Form1" action="" method="get">
    <input name="tjek" type="radio" value="" onclick="Resetradio()" />
    <input name="tjek" type="radio" value="" onclick="Resetradio()" />
    <input type="submit" value="Send" />
</form>

<form name="Form2" action="" method="get">
    <input name="tjek" type="radio" value="" onclick="Resetradio()" />
    <input name="tjek" type="radio" value="" onclick="Resetradio()" />
    <input type="submit" value="Send" />
</form>

http://jsfiddle.net/dhP3K/

应该通过所有无线电并收集所选的一个,然后再次运行它们以取消选择所有其他无线电,如果有任何其他选择。故障在哪里?

1 个答案:

答案 0 :(得分:1)

它不起作用,因为您可以选择多个按钮。因此selectedradio将始终是所选按钮的最高索引。如果您尝试选择索引较低的按钮,则会在第二个循环中立即“重置”。想一想:

  • 按钮3被选中-> selectedradio === 3
  • 重置按钮0,1和2
  • 按钮1被选中-> selectedradio === 3,因为radios[3].checked仍为true
  • 重置按钮0,1和2

因此,不是迭代按钮来找出选择了哪一个,只需将所选按钮的引用传递给函数:

function Resetradio(selected) {
    var radios = document.getElementsByName("tjek");

    var i = 0;
    while (i < radios.length) {
        if (radios[i] !== selected) 
        radios[i].checked = false
        i++;
    }
}

调用
onchange="Resetradio(this)"