2012-03-13 7 views
2

チェックボックスclickイベントでevent.stopPropagation()が発生すると、関連するchangeイベントがIE9より前にIEで発生するのを防ぐことができます。checkbox clickイベントのevent.stopPropagationは、IE8以前でchangeイベントが発生しないようにしますか?

変更イベント以前IE8でない火を行い、以下のjQueryブロックと

<input type="checkbox" value="Y" checked>Test 
<div id="output">Logging...</div> 

(以下のコードは、jsFiddleである)、それはIE9(およびクローム)で火を行います。

$(document).ready(function() { 

    $("input").click(function(event) { 
     event.stopPropagation(); 
     $("#output").append("<pre>click</pre>"); 
    }); 

    $("input").change(function(event) { 
     $("#output").append("<pre>change</pre>"); 
    }); 

}); 

ChromeとIE9は与える:

Logging... 
change 
click 
change 
click 
change 
click 
IE8一方

およびそれ以前は与える:

Logging... 
click 
click 
click 

をしかし、私は予想通り、すべての作品の取り扱い 'IE9の前に' 特定入れた場合、次のjqueryのブロックで

$(document).ready(function() { 

    $("input").click(function(event) { 

     event.stopPropagation(); 

     $("#output").append("<pre>click</pre>"); 

     // fix event bubbling before IE9 
     if ($.browser.msie) { 
      if (parseInt($.browser.version, 10) < 9) { 
       $(this).trigger("change"); 
      } 
     } 

    }); 

    $("input").change(function(event) { 
     $("#output").append("<pre>change</pre>"); 
    }); 

}); 

は、これは予想される動作ですか?

+0

期待していますか?いいえ、私は正直なところ、IEの以前のバージョンは非常にばかげているようなことをしても驚くことはありません。 –

答えて

1

(私は答えを受け入れることができるようにTGRの答えにコメントをコンパイル。)

「するevent.stopPropagation()」ラインは、クリックイベントから削除されている場合はIE8で期待どおりに変更イベントがそのように、発射されますこれはよく知られているIE8バグmentioned by Tgrではありません。

@Tgrがあることが確認さ:

jQueryのはこの1つを含むほとんどのブラウザの癖を、正規化しようとします:それはクリックで変更イベントをシミュレートし、もう1つは(jQuery.event.special.changeを参照)ブラーに発砲食べます。 stopPropagationはおそらくそれを妨害します。

3

これは、イベントバブリングとは何の関係もないwell-known IE8 bugです。変更イベントは、フォーカスが離れるとチェックボックスでのみ発生します。

+0

お返事ありがとうございます。ただし、clickイベントからevent.stopPropagation()行が削除された場合、changeイベントはIE8で予期されたとおりに発生します。 –

+0

だから... "event.stopPropagation()"行が削除されたときに私が提供したテストケースがよく知られているIE8のバグだとは思わない。 –

+1

jQueryは、これを含むほとんどのブラウザー・クォークを正規化しようとします。クリック時に変更イベントをシミュレートし、ブラーで発生したイベントをシミュレートします( 'jQuery.event.special.change'を参照)。 'stopPropagation'はおそらくそれに干渉します。 – Tgr

関連する問題