9

我有一组带有 onchange 处理程序的收音机:

<input type="radio" name="Q12" value="radio" id="Q12_0"  onchange="nextPnl('Q12');">
<br/>
<input type="radio" name="Q12" value="radio" id="Q12_1"  onchange="nextPnl('Q12');">
         ​

function nextPnl(did)
{
document.write(did);

}​

问题是在IE8&IE7中,onchange事件只有在反复选择后才会触发。

请在 IE 的开发者工具 [浏览器模式] IE8 中查看此演示:http: //jsfiddle.net/3zwur/2/

4

3 回答 3

16

这是由于 IE7 和 IE8 的更改事件的错误。您应该改为收听该click事件。

如这张关于 quirks mode 的表格所示,单选按钮和复选框上的更改事件在 IE7 和 IE8 中存在很大缺陷。

您可以像这样收听点击事件:

<input type="radio" name="Q12" value="radio" id="Q12_0"  onclick="nextPnl('Q12');">
<br>
<input type="radio" name="Q12" value="radio" id="Q12_1"   onclick="nextPnl('Q12');">

还有你小提琴的一个叉子:http: //jsfiddle.net/T7VYL/

通常,使用诸如JQueryYUI之类的 javascript 库会使您的生活更轻松,尽管根据我的测试,它们并没有修复旧版本 IE 中的这个错误。

如果您仍想收听更改事件,可以部署此修复程序:http ://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not-firing/ . 基本上,它会侦听 click 事件,然后使元素触发 change 事件。

正如提问者的小提琴所示:http: //jsfiddle.net/3zwur/3

于 2012-06-17T01:14:14.367 回答
3

另一种选择是像你一样拥有一个 onchange 事件,并添加一个从单选按钮移除焦点的 onclick 事件:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="this.blur()" onchange="nextPnl('Q12');">
于 2013-06-19T16:10:52.703 回答
0

另一种解决方案是onchange通过 jQuery 将事件放在封闭的表单上。

$('#form').on('change', function() {
    $(this).submit();
});
于 2015-05-04T07:16:17.757 回答