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 モードに関するこの表に示されているように、ラジオ ボタンとチェックボックスの変更イベントは、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/ . 基本的に、クリック イベントをリッスンし、要素に変更イベントを発生させます。

アスカーのフィドルで示されているように:http://jsfiddle.net/3zwur/3

于 2012-06-17T01:14:14.367 に答える
3

もう 1 つのオプションは、既にある 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

もう 1 つの解決策は、onchangejQuery を介して囲んでいるフォームにイベントを配置することです。

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