2

注***: タブレットでテストする必要があります。私は Ipad でのみテストしました

1回のタッチで、同じスポーツで異なるオブジェクトの異なるイベントが発生します

http://jsfiddle.net/wR6dK/1/

HTML:

<div id="box1"></div>
<div id="box2"></div>

JS:

$("#box1").on('tap',function(){
    $("#log").append('box1 clicked <br>');
    $(this).fadeOut(0);
});

$("#box2").on('tap',function(){
    $("#log").append('box2 clicked <br>');
    $(this).fadeOut(0);
});

この場合、緑色のボックスは非表示になっています...移動したり、z-index を再配置したりできます。すべてが 1 回のタッチで赤いボックスのイベントをトリガーします

それはどのように機能するのですか?「vclick」やその他のイベントでも発生していますか?

バグですか?

4

1 に答える 1

2

これは最も古い 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で非推奨になっていることを知っておいてください。しかし、これは私の古い例です。

于 2013-04-17T22:31:07.807 に答える