简体   繁体   English

选择一个单选按钮时,Javascript单选按钮取消选择其他按钮?

[英]Javascript radio button deselect others when selecting one radio button?

I have two radio buttons for selecting cars. 我有两个用于选择汽车的单选按钮。 There are only two options: either you can select a BMW car or you can select a Mercedes car. 只有两种选择:您可以选择宝马汽车,也可以选择梅赛德斯汽车。

Here's my html code for this: 这是我的html代码:

<label>Please specify car:</label>&nbsp; &nbsp;
<label>BMW</label>
<input type="radio" name="is_BMW" id="is_BMW" onchange="valueChanged()" />
&nbsp;&nbsp;
<label>Mercedes</label>
<input type="radio" name="is_Mercedes" id="is_Mercedes" onchange="valueChanged()" />

The javascript function for this event is valueChanged() and it is pretty much straight-forward: 这个事件的javascript函数是valueChanged(),它非常简单:

<script>
    function valueChanged(){
        if(document.getElementById("is_BMW").checked == true)
        {
            document.getElementById("is_Mercedes").checked = false;
        }
        else
        {
            document.getElementById("is_BMW").checked = false;
        }
    }
</script>

The problem I'm getting is this: whenever I click the BMW radio button, it get's fixed and I can't change to Mercedes. 我得到的问题是:每当我点击BMW单选按钮时,它就会被修复,我无法改为梅赛德斯。

If I click on the Mercedes radio button first, then I'm able to switch to BMW, but again, once I select BMW, I can't change to Mercedes anymore and it get's fixed. 如果我先点击梅赛德斯单选按钮,那么我就可以切换到宝马了,但是再一次,一旦我选择了宝马,我就不能再换成梅赛德斯而且它已经修好了。

Is there anything wrong with my Javascript? 我的Javascript有什么问题吗? Because my Javascript knowledge tells me there's nothing wrong with my Javascript code. 因为我的Javascript知识告诉我,我的Javascript代码没有任何问题。 Is it something else? 还有别的吗? Should I use jQuery to resolve this? 我应该使用jQuery来解决这个问题吗?

Edit-1 : I'm sorry I forgot to mention one crucial point - I need to pass value onchange of radio button. 编辑-1 :对不起,我忘了提到一个关键点 - 我需要传递值来改变单选按钮。 I'm especially sorry to the one person who answered my question instantly, I should've mentioned this earlier, my bad. 我对那个立即回答我问题的人特别感到遗憾,我应该早些提到这个,我的不好。

Hence, my actual Javascript could should be something like this: 因此,我的实际Javascript应该是这样的:

<script>
        function valueChanged(){
            if(document.getElementById("is_BMW").checked == true)
            {
                document.getElementById("is_Mercedes").checked = false;
                document.getElementById("is_BMW").value = 1;
                document.getElementById("is_Mercedes").value = 0;
            }
            else
            {
                document.getElementById("is_BMW").checked = false;
                document.getElementById("is_BMW").value = 0;
                document.getElementById("is_Mercedes").value = 1;
            }
</script>

I'm changing my answer according to your requirement. 我根据你的要求改变我的答案。

In your HTML give same name to both radio buttons. HTML中为两个单选按钮指定相同的名称。 This will take care of select and deselect . 这将负责选择和取消选择

<label>Please specify car:</label>&nbsp; &nbsp;
<label>BMW</label>
<input type="radio" name="car" id="is_BMW" />
&nbsp;&nbsp;
<label>Mercedes</label>
<input type="radio" name="car" id="is_Mercedes" />

And put the value changing logic in js like bellow 并将值改变逻辑放在js中 ,如下所述

function valueChanged() {
    if (document.getElementById("is_BMW").checked == true) {
        document.getElementById("is_BMW").value = 1;
        document.getElementById("is_Mercedes").value = 0;
    } else {
        document.getElementById("is_BMW").value = 0;
        document.getElementById("is_Mercedes").value = 1;
    }
    console.log(document.getElementById("is_BMW").value);
    console.log(document.getElementById("is_Mercedes").value)
}

Explanation:- 说明:-

The name setting tells which group of radio buttons the field belongs to. 名称设置告诉该字段属于哪组单选按钮。 When you select one button, all other buttons in the same group are unselected. 选择一个按钮时,同一组中的所有其他按钮都将被取消选中。

updated demo 更新的演示

The radio button is unlike a check box because only one element can be selected at a time. 单选按钮与复选框不同,因为一次只能选择一个元素。 But, in order for this to work, the radio buttons must be 'grouped' together. 但是,为了使其工作,单选按钮必须“分组”在一起。

This is done by specifying input elements with the same name . 这是通过指定具有相同name input元素来完成的。

In your example, this can be achieved by changing the following in your HTML: 在您的示例中,可以通过更改HTML中的以下内容来实现:

<input type="radio" name="car_type" id="BMW" />
<input type="radio" name="car_type" id="Mercedes" />

No additional Javascript would be necessary to get the desired behavior. 无需额外的Javascript即可获得所需的行为。

Hope this helps offer some additional explanation! 希望这有助于提供一些额外的解释!

Edit: Not sure what you are trying to do, but you can extract the value by simply iterating over the radio elements in Javascript: 编辑:不确定您要做什么,但您可以通过简单地迭代Javascript中的无线电元素来提取值:

var r = document.getElementsByName('car_type');
for (var i = 0, i < r.length; i++) {
    if (r[i].checked) {
        // insert code to use the checked value
        alert(r[i].value);
        break;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM