IE8& IE7 onchange事件仅在重复选择后触发

时间:2012-06-17 01:08:31

标签: html javascript-events internet-explorer-8 radio-button

我有一组带有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&amp; IE7,只有在重复选择后才会触发onchange事件。

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

3 个答案:

答案 0 :(得分:16)

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

如此table on 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

答案 1 :(得分:3)

另一种选择是拥有一个onchange事件,并添加一个onclick事件,从单选按钮中删除焦点:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="this.blur()" onchange="nextPnl('Q12');">

答案 2 :(得分:0)

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

$('#form').on('change', function() {
    $(this).submit();
});