3

動作を最も単純なケースに減らすことができます (最新の Chrome、Safari、Firefox、IE 9 および 10 でテスト済み (jsfiddle は IE 8 では動作しません)):

http://jsfiddle.net/fjvqa/1

$("input").click(function (evt) {
    console.log("click event handler invoked", evt);
    console.log($("input").attr("checked"));
    console.log($("input").prop("checked"));
    console.log($("input").is(":checked"));
});

$("input").click();

HTMLで:

<input type="checkbox"></input>

出力は次のとおりです。

undefined
false
false

チェックボックスがチェックされていないことを報告する必要があるのは正しいはずですか?

それが正しければ、なぜ jQuery 1.9.1 で動作が完全に逆になるのでしょうか? http://jsfiddle.net/fjvqa/2

それが正しくない場合、2012 年 11 月 13 日にリリースされた jQuery 1.8.3 に、なぜこのような単純なバグがまだ残っているのでしょうか?

PS私は、(1)をattr()使用prop()すべきではなく、代わりに使用する必要があることを理解しています。何が起こっているのかを確認するためだけに印刷します。(2)ハンドラーは、 jQuery 1.8.3 を使用している場合changeのレポートとは逆の結果を実際に報告します: http://jsfiddle.net/fjvqa/3 jQuery 1.9.1 の場合、同じことを報告します: http://jsfiddle .net/fjvqa/4 私が探しているのは、起こるはずの実際の状況です。click

4

1 に答える 1

0

コメントはあなたに答えを与えました - 変更はクリック後に起こります. 変更を発生させるイベントにバインドしています。これには明確な定義がないため、バージョン間の不一致が見られると思います。解決策は、.click の代わりに .change を使用することです。

更新されたフィドル:
http://jsfiddle.net/fjvqa/22/

$("input").change(function (evt) {
    console.log("click event handler invoked", evt);
    console.log($("input").attr("checked"));
    console.log($("input").prop("checked"));
    console.log($("input").is(":checked"));
});

$("input").click();

出力:

checked
true
true
于 2013-04-17T08:49:55.903 に答える