2012-06-17 65 views
9

后才onchange事件我有一个onchange处理器一组单选的:IE8和IE7被触发重复选择

<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事件只有经过反复的选择。 http://jsfiddle.net/3zwur/2/

+0

你可以找到在IE7/IE8的通用解决方案*平变化*事件的错误[本条](http://sleeplesscoding.blogspot.ro/2010/01/fixing-ie-onchange-event-在换checkboxes.html)。 –

回答

16

这是由于与IE7和IE8的改变事件中的错误:

请查看该演示在IE的开发工具[浏览器模式] 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/

通常情况下,使用JavaScript库如JQueryYUI使您的生活更轻松,虽然从我的测试中,他们并没有修复旧版IE中的这个bug。

如果您仍希望听取更改事件,则可以部署此修复程序:http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not-firing/。基本上它会监听点击事件,然后使元素触发一个更改事件。

这表现在提问者的小提琴:http://jsfiddle.net/3zwur/3

+0

我刚刚测试过JQuery和YUI3,不幸的是,他们并没有修复旧版IE中的这个bug。您的解决方案是聆听点击事件,或导致更改事件触发,如下所示:http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not-射击/ – F21

+0

http://jsfiddle.net/3zwur/3/ –

+0

这为我提前解雇 - 在文件输入对话框出现之前注册点击。我的解决方案是在点击后0毫秒执行'setTimeout'上的更改函数,在发生这种情况之前滥用异步性以允许堆栈清除(并解决文件输入操作):onchange =“setTimeout(function deferNextPnl() {nextPnl( 'Q12')},0)“'。 – Barney

3

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

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

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

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