javascript - 单选按钮的 OnChange 事件处理程序(输入类型 ="radio")不能作为一个值工作

标签 javascript html cross-browser

我正在为此寻找一个通用的解决方案。

考虑 2 个具有相同名称的 radio 类型输入。提交时,被检查的那个决定了与表单一起发送的值:

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

取消选择单选按钮时不会触发更改事件。因此,如果已经选择了带有 value="1" 的 radio 并且用户选择了第二个,则 handleChange1() 不会运行。这带来了一个问题(无论如何对我来说),因为没有事件可以让我捕捉到这种取消选择。

我想要的是针对复选框组值的 onChange 事件的解决方法,或者是一个 onCheck 事件,它不仅检测单选按钮何时被选中,而且未选中时也是如此。

我相信你们中的一些人以前遇到过这个问题。有哪些解决方法(或者理想情况下处理这个问题的正确方法是什么)?我只想捕捉更改事件,访问之前检查的 radio 以及新检查的 radio 。

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

我认为为什么复选框类型的 onChange 在这种情况下确实有效是有道理的,因为它会在您选中或取消选中它时更改它提交的值。我希望单选按钮的行为更像 SELECT 元素的 onChange 但你能做什么......

最佳答案

var rad = document.myForm.myRadios;
var prev = null;
for (var i = 0; i < rad.length; i++) {
    rad[i].addEventListener('change', function() {
        (prev) ? console.log(prev.value): null;
        if (this !== prev) {
            prev = this;
        }
        console.log(this.value)
    });
}
<form name="myForm">
  <input type="radio" name="myRadios"  value="1" />
  <input type="radio" name="myRadios"  value="2" />
</form>

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

关于javascript - 单选按钮的 OnChange 事件处理程序(输入类型 ="radio")不能作为一个值工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838648/

相关文章:

javascript - 如何在 JavaScript 中为 IE8 添加不可枚举的属性?

javascript - 如何为链接添加声音

javascript - indexof - 检查一个值是否已经在 javascript 数组中)

javascript - .hasClass() 忘记了类分配。为什么?

javascript - 创建基本的人体测试验证

javascript - 为什么我没有在 Canvas 上绘制图像?

javascript - 谷歌地图在ajax上成功

javascript - 如何在 md-dialog 上叠加 md-dialog

css - Opera 中的 box-shadow(较旧)在一个地方无法按预期工作

javascript - 返回上一页的元标记