我在寻找一个广义解。

考虑具有相同名称的2个无线电类型输入。当提交时,被选中的值决定随表单一起发送的值:

<input type="radio" name="myRadios" onchange="handleChange1();" value="1" />
<input type="radio" name="myRadios" onchange="handleChange2();" value="2" />

取消选择单选按钮时,更改事件不会触发。因此,如果值="1"的无线电已经被选中,而用户选择了第二个,则handleChange1()不会运行。这就出现了一个问题(至少对我来说),因为我无法捕捉到这种去选择。

我想要的是一个变通的onChange事件的复选框组值,或者,一个onCheck事件,不仅检测单选按钮是选中的,而且当它是未选中的。

我相信你们中的一些人以前遇到过这个问题。有什么变通办法(或者理想情况下,什么是处理这个问题的正确方法)?我只是想捕捉变化事件,访问以前检查的收音机以及新检查的收音机。

注: onClick似乎是一个更好的(跨浏览器的)事件来指示选中单选按钮,但它仍然不能解决未选中的问题。

我认为这是有意义的,为什么onChange复选框类型在这样的情况下工作,因为它改变了它提交的值,当你勾选或取消勾选它。我希望单选按钮表现得更像一个SELECT元素的onChange,但你能做什么…


当前回答

您可以添加以下JS脚本

<script>
    function myfunction(event) {
        alert('Checked radio with ID = ' + event.target.id);
    }
    document.querySelectorAll("input[name='myRadios']").forEach((input) => {
        input.addEventListener('change', myfunction);
    });
</script>

其他回答

<script>
    function radioClick(radio){
        alert()
    }
</script>

<label>Cash on delivery</label>
<input type="radio" onclick="radioClick('A')" name="payment_method" class="form-group">

<br>

<label>Debit/Credit card, GPay, Paytm etc..</label>
<input type="radio" onclick="radioClick('B')" name="payment_method" class="form-group">

出于某种原因,最好的答案对我来说并不适用。

我通过实践改进了最佳答案

    var overlayType_radio = document.querySelectorAll('input[type=radio][name="radio_overlaytype"]');

原最佳答案用法:

      var rad = document.myForm.myRadios;

其他人保持不变,最后对我有用。

var overlayType_radio = document.querySelectorAll('input[type=radio][name="radio_overlaytype"]');
                              console.log('overlayType_radio', overlayType_radio)

                              var prev = null;
                              for (var i = 0; i < overlayType_radio.length; i++) {
                                  overlayType_radio[i].addEventListener('change', function() {
                                      (prev) ? console.log('radio prev value',prev.value): null;
                                      if (this !== prev) {
                                          prev = this;
                                      }
                                      console.log('radio now value ', this.value)
                                  });
                              }

html是:

<div id='overlay-div'>
                        <fieldset>
                                <legend> Overlay Type </legend>
                                
                                <p>
                                    <label>
                                      <input class='with-gap' id='overlayType_image' value='overlayType_image' name='radio_overlaytype' type='radio' checked/>
                                      <span>Image</span> 
                                    </label>
                                </p>

                                <p>
                                  <label>
                                    <input class='with-gap' id='overlayType_tiled_image' value='overlayType_tiled_image' name='radio_overlaytype' type='radio' disabled/>
                                    <span> Tiled Image</span>   
                                </p>

                                <p>
                                  <label>
                                    <input class='with-gap' id='overlayType_coordinated_tile' value='overlayType_coordinated_tile' name='radio_overlaytype' type='radio'  disabled/>
                                    <span> Coordinated Tile</span>  
                                </p>

                                <p>
                                  <label>
                                    <input class='with-gap' id='overlayType_none' value='overlayType_none' name='radio_overlaytype' type='radio'/>
                                    <span> None </span>            
                                  </p>

                                  
                          </fieldset>
                       </div>

var overlayType_radio = document.querySelectorAll('input[type=radio][name="radio_overlaytype"]'); console.log('overlayType_radio', overlayType_radio) var prev = null; for (var i = 0; i < overlayType_radio.length; i++) { overlayType_radio[i].addEventListener('change', function() { (prev) ? console.log('radio prev value',prev.value): null; if (this !== prev) { prev = this; } console.log('radio now value ', this.value) }); } <div id='overlay-div'> <fieldset> <legend> Overlay Type </legend> <p> <label> <input class='with-gap' id='overlayType_image' value='overlayType_image' name='radio_overlaytype' type='radio' checked/> <span>Image</span> </label> </p> <p> <label> <input class='with-gap' id='overlayType_tiled_image' value='overlayType_tiled_image' name='radio_overlaytype' type='radio' /> <span> Tiled Image</span> </p> <p> <label> <input class='with-gap' id='overlayType_coordinated_tile' value='overlayType_coordinated_tile' name='radio_overlaytype' type='radio' /> <span> Coordinated Tile</span> </p> <p> <label> <input class='with-gap' id='overlayType_none' value='overlayType_none' name='radio_overlaytype' type='radio'/> <span> None </span> </p> </fieldset> </div>

点击这里

https://jsfiddle.net/hoogw/jetmkn02/1/

var rad = document. myform . mybroadcasts; Var prev = null; For (var I = 0;I < rad.length;我+ +){ rad[我]。addEventListener('change', function() { (上一页)?console.log (prev.value):空; If (this !== prev) { Prev = this; } console.log (this.value) }); } <表单名称= " myForm " > <input type="radio" name=" mybroadcasts " value="1" /> <input type="radio" name=" mybroadcasts " value="2" /> > < /形式

下面是一个JSFiddle演示:https://jsfiddle.net/crp6em1z/

This is just off the top of my head, but you could do an onClick event for each radio button, give them all different IDs, and then make a for loop in the event to go through each radio button in the group and find which is was checked by looking at the 'checked' attribute. The id of the checked one would be stored as a variable, but you might want to use a temp variable first to make sure that the value of that variable changed, since the click event would fire whether or not a new radio button was checked.

从这个例子中可以看到:http://jsfiddle.net/UTwGS/

HTML:

<label><input type="radio" value="1" name="my-radio">Radio One</label>
<label><input type="radio" value="2" name="my-radio">Radio One</label>

jQuery:

$('input[type="radio"]').on('click change', function(e) {
    console.log(e.type);
});

在选择单选按钮选项时(至少在某些浏览器中)会触发单击和更改事件。

我还应该指出,在我的例子中,当您使用tab和键盘选择一个选项时,单击事件仍然会触发。

因此,我的观点是,即使某些浏览器触发了change事件,但click事件应该提供所需的覆盖范围。