0

クリックイベントを聞いています。トリガーされたときに、別のイベント (他の要素用) をバインドする必要がありますが、最初のイベントで両方をトリガーし続けます。

私のコード:

$(".element1").on("click", function(){  
    console.log("triggered element1");  
    $(".element2").on("click", function(){  
        console.log("triggered element2");  
    })  
});
4

2 に答える 2

1

がクリック.element2されるたびに、 のイベント ハンドラーの別のコピーがバインドされます。.element1それを防ぎたい場合は、すでにハンドラーをバインドしているかどうかを変数に覚えておいてください。

var e2bound = false;
$(".element1").on("click", function(){  
    console.log("triggered element1");  
    if(!e2bound){
        $(".element2").on("click", function(){  
            console.log("triggered element2");  
        })
        e2bound=true;
    }
});

別の解決策は、実行時に最初のハンドラーをバインド解除することです。

$(".element1").on("click", function e1handler(){  
    console.log("triggered element1");  
    $(this).off("click", e1handler);
    $(".element2").on("click", function(){  
        console.log("triggered element2");  
    })  
});
于 2012-11-01T19:31:20.577 に答える
0

.off()を使用してイベントを削除し、を使用してみてくださいe.stopPropgation()

$(".element1").on("click", function(){  
    console.log("triggered element1");  
    $(".element2").off('click').on("click", function(e){  
        e.stopPropagation();
        console.log("triggered element2");  
    })  
});

頻繁なバインドとバインド解除は悪い習慣です。可能であればそれを避ける必要があります。HTML構造を表示できれば簡単になります。

于 2012-11-01T19:30:46.817 に答える