我正在寻找一个通用的解决方案 .
考虑具有相同名称的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 for checkbox类型在这种情况下工作是有道理的,因为它会更改它在检查或取消选中时提交的值 . 我希望单选按钮的行为更像是SELECT元素的onchange但是你能做什么......
14 回答
这是一个JSFiddle演示:https://jsfiddle.net/crp6em1z/
如果您想避免使用内联脚本,只需在收音机上收听点击事件即可 . 这可以通过听取点击事件来使用普通的Javascript来实现
这是最容易和最有效的功能,只需添加任意数量的按钮,你可以使用checked = false,并使每个单选按钮的onclick事件调用此函数 . 为每个单选按钮指定一个唯一的编号
}
使用Jquery的change事件怎么样?
jsfiddle:http://jsfiddle.net/f8233x20/
我会做两个改变:
使用
onclick
处理程序而不是onchange
- 您正在更改无线电输入的"checked state",而不是value
,因此没有发生更改事件 .使用单个函数,并将
this
作为参数传递,这样可以轻松检查当前选择的值 .ETA:与
handleClick()
函数一起,您可以在页面范围的变量中跟踪无线电的原始/旧值 . 那是:这对我有用
这只是我的头脑,但你可以为每个单选按钮执行onClick事件,为它们提供所有不同的ID,然后在事件中进行for循环以遍历组中的每个单选按钮并查找哪个是通过查看“已检查”属性进行检查 . 已检查的id将作为变量存储,但您可能希望首先使用temp变量来确保该变量的值发生更改,因为无论是否选中了新的单选按钮,click事件都会触发 .
从这个例子中可以看出:http://jsfiddle.net/UTwGS/
HTML:
jQuery的:
选择单选按钮选项时会触发
click
和change
事件(至少在某些浏览器中) .我还应该指出,在我的示例中,
click
事件 is still fired 当您使用选项卡和键盘选择一个选项时 .所以,我的观点是,即使某些浏览器触发了
change
事件,click
事件也应该提供您需要的覆盖范围 .是的,当前选择的单选按钮没有更改事件 . 但问题是每个单选按钮被视为一个单独的元素 . 相反,无线电组应被视为像
select
这样的单个元素 . 因此,该组触发了更改事件 . 如果它是select
元素,我们从不担心它中的每个选项,但只选择所选的选项 . 当选择新选项时,我们将当前值存储在变量中,该变量将成为先前的值 . 同样,您必须使用单独的变量来存储已检查单选按钮的值 .如果要识别上一个单选按钮,则必须循环
mousedown
事件 .看到这个:http://jsfiddle.net/diode/tywx6/2/
我认为除了存储以前的状态之外没有任何其他方法 . 这是jQuery的解决方案
在考虑了一下之后,我决定摆脱变量并添加/删除类 . 这是我得到的:http://jsfiddle.net/BeQh3/2/
正如您在此处所见:http://www.w3schools.com/jsref/event_onchange.asp单选按钮不支持onchange属性 .
由您链接的第一个SO问题为您提供答案:改为使用
onclick
事件并检查它触发的函数内部的单选按钮状态 .将先前检查的无线电存储在变量中:
http://jsfiddle.net/dsbonev/C5S4B/
HTML
JS
JS示例代码
我意识到这是一个老问题,但是这个代码片段对我有用 . 也许未来有人会发现它很有用: