これは最も古い JavaScript エラーの 1 つであり、長い間認識されていなかったため、修正されていません。簡単に言うと、javascript はこのように使用されることを意図したものではありませんでしたが、人にツールを与えれば、必要に応じてそれを曲げてくれるので、jQuery や jQuery Mobile のようなフレームワークができました。
これはフォール スルー イベントとも呼ばれます。これは、次の関数で防ぐことができます。
false を返します。
これは、このソリューションで動作するように変更された例です: http://jsfiddle.net/Gajotres/wR6dK/5/
$("#box1").on('tap',function(e){
$("#log").append('box1 clicked <br>');
$(this).fadeOut(0);
e.stopPropagation();
return false;
});
$("#box2").on('tap',function(e){
$("#log").append('box2 clicked <br>');
$(this).fadeOut(0);
e.stopPropagation();
return false;
});
jQuery Mobile の場合のこの問題を理解できるように、別の例を示しましょう: http://jsfiddle.net/Gajotres/Xz2np/
$('#page1').live('pagebeforeshow',function(e,data){
$('.someDiv').live('click', function (e) {
alert('Event is not going to propagate to content div, thus not hiding a header');
event.stopPropagation();
event.stopImmediatePropagation();
});
});
この問題を理解するには、DIV の例をクリックしてその 2 行をコメントし、もう一度例を実行して DIV をクリックします。そして、ライブはjQuery 1.9で非推奨になっていることを知っておいてください。しかし、これは私の古い例です。