5

左からスライドインするサイド ペインがあり、get() でコンテンツを動的に追加します。ペインの外側のすべてのクリックで、関数をトリガーしてペインを閉じるようにします。私が読んだ他の質問に基づいて、次のコードを思いつきました。

$('html').click(function() {
    if (side_showing) {
        close_side();
    }
});

$(document).on("click", "#side", function(event) {  
    event.stopPropagation();
});

私はそれを機能させることができないようです。on()関数がトリガーされていることは知っていますが、トリガーされevent.stopPropagationていないようです。任意のヒント?

4

1 に答える 1

13

stopPropagation()委任されたイベント処理 (イベント ハンドラーが親にある場合) では使用できません。

これは、委任されたイベント処理を最初に機能させるのはイベントの伝播であるため、イベント ハンドラーが呼び出されるまでに、イベントは既に伝播されています。

コード内で発生する順序は次のとおりです。ドキュメント オブジェクトまでイベントが伝播され、次にイベント ハンドラが呼び出されます。したがって、イベントが既に伝播されているため、呼び出しevent.stopPropagation()ても何もしません。

親オブジェクトがイベントの伝播を取得しないようにする必要がある場合は、委任されたイベント処理を使用できません。イベントハンドラーをオブジェクト自体に直接割り当てる必要があるため、イベントが伝播する前にインターセプトできます。これらが動的に作成されたオブジェクトである場合は、作成直後にイベント ハンドラーを割り当てる必要があります。

私が知っている唯一の他の解決策は、これらのイベントを表示したくない親オブジェクトにイベントハンドラーを配置し、それらのイベントハンドラーが#sideオブジェクトで発生した場合にイベントを無視するようにすることです。

于 2012-08-11T00:12:36.223 に答える