これは興味深い問題です (ここで再現しました)。もちろん、change
ハンドラーではなくclick
ハンドラーを使用したくなるかもしれませんが ( example )、問題は、状態を切り替えるために使用するときに IEでまったくchange
起動しないことです。これは、そうしない正当な理由かもしれません。click
デフォルト アクションの実行に依存しない独自のメカニズムを定義できると思いますclick
— 小さな小さなプラグイン、または呼び出して jQuery オブジェクトに渡す単なる関数です。以下は小さなプラグイン バージョンです。
(function($) {
$.fn.flip = function() {
this.prop("checked", !this.prop("checked"));
this.triggerHandler("click");
this.triggerHandler("change");
};
})(jQuery);
使用法:
$('my_checkbox').flip();
実例| ソース
複数のチェックボックスを含むjQueryオブジェクトに適用された場合、そのオフザカフバージョンは、それらすべてを同じ値に強制することに注意してください。それらを独立させたい場合は、ループできます。
(function($) {
$.fn.flip = function() {
this.each(function() {
this.checked = !this.checked;
});
this.triggerHandler("click");
this.triggerHandler("change");
};
})(jQuery);
実例| ソース
triggerHandler
ではなくを使用することでtrigger
、デフォルト アクションの発生を回避します。
別の方法は、チェックボックスのすべてのclick
ハンドラーでタイムアウトを使用することです。
$("my_checkbox").click(function() {
var $this = $(this);
setTimeout(function() {
// Actually do something with $this
}, 0);
});
...これはメンテナンスの悪夢のようです。