0
    <div class="parent">
        <div class="child">
        </div>
    </div>
    <script type="text/javascript">
    $(document).on("click", ".parent", function(event){
        doAjaxCall();
    });

    $(document).on("click", ".child", function(event){
        doSomething(); // and DON'T call doAjaxCall();
    });
</script>

event.stopPropagation();また、機能しreturn false;ていません。何が問題なのですか?

編集:わかりました、それはjs fiddleで動作していることは明らかです:http://jsfiddle.net/Smbb4/ コードをもう一度確認する必要があります。

Edit2:解決策:

    $('.parent').click(function(event) {

        if ( $(event.target).closest('.child').length > 0 ) {
            var close = $(event.target).closest('.child');
            var windowID = close.data('windowid');

            closeWindow(windowID);
            return false;
        }
        });
4

3 に答える 3

4

親の場合、必要なクリックハンドラは1つだけです。元のターゲットが子内にある場合を除いて、イベントを通常の方法で処理します。子内にある場合は、分岐して別のことを行います。

$(document).on("click", ".parent", function(event){

    if ( $(event.target).closest('.child').length > 0 ) {
        doSomething;
        return false;
    }

    doAjaxCall();
});
于 2012-12-02T10:20:49.817 に答える
1

この方法を試してください

$(".parent").click(function() {

});

$(".child").click(function() {

});

正常に動作するはずです。それらをdocument.ready関数に入れる必要はありません

于 2012-12-02T09:57:26.170 に答える
-1

問題が見つかりました:

img.theaterではなくbody要素でonを使用しているため、イベントはbody要素にバブルアップし、それが機能します。

イベントバブリングの過程で、.theater-wrapper要素のクリックイベントがトリガーされるので、それが表示されます。

jQuery on()stopPropagationが機能していませんか?

解決:

$('.parentParent').on("click", ".child", function(event){});
于 2012-12-02T10:15:38.607 に答える