1

このコードが FF、Chrome、および IE9 で true を出力し、IE 7-8 で false を出力する理由を知っている人はいますか? そしてもちろん、それを一貫させる方法。

$("#cb1").on("change", function(e) {
    $("#value").text(e.target.checked);
});

$("#cb1").trigger("click");

HTMLは

<input type="checkbox" id="cb1" />
<div id="value"></div>

jsfiddleも用意しました。

4

1 に答える 1

0

IE で false を返す理由は、イベントのタイミング/順序によるものです。

change イベントがトリガーされている IE では、checked 属性はまだ設定されていません。

そのイベントが競合すると、それは設定されており、.checked は true を返します。

これがこれを実装する最良の方法だとは思いませんが、あなたの質問に答えるために...

実際の設定をラップする既存のコードに基づいて、setTimeout 呼び出しのテキストはその実行を遅らせます。

これは、コードがこの変更を実行すると、変更が完了しても、checked 属性が設定され、「正しい」/望ましい動作が見られることを意味します。

ここでフィドルを更新しましたhttp://jsfiddle.net/WkGUr/16/

$("#cb1").on("change", function(e) {
    setTimeout(function() {
        $("#value").text(e.target.checked);
    }, 0);
});

$("#cb1").trigger("click");
于 2012-12-11T23:57:50.003 に答える