0

私はこのコードを持っていますが、常に に添付されたイベントを発生させるようです'html'。なぜなら、.optTriggerメニューをクリックしてもう一度クリックすると、ちらつきが発生し、メニューが1秒間非表示になり、再び表示されるからです。'html'クリックイベントが発生すると思います。


試してみてください: これがアップロードされたサイトです。新しいタスクを追加し、オプション トリガーをクリックする必要があります。これは、新しいタスクのチェック ボタンの右端にある矢印ボタンです。 ここ


これが私のコードです:

html:

<div class="mainTaskWrapper clearfix">
    <div class="mainMarker"></div>
    <label class="mainTaskLabel"></label>
    <div class="mainHolder"></div>
    <div class="subTrigger opened"></div>
    <div class="checkButton"></div>
    <div class="optTrigger"></div>
    <div class="addSubButton"></div>
    <div class="dateInfo"></div>
    <div class="mainOptions">
        <ul>
            <li id="mainInfo">Details</li>
            <li id="mainEdit">Edit</li>
            <li id="mainDelete">Delete</li>
        </ul>
    </div>
</div>

脚本:

$("#tasksWrapper").on("click", ".mainTaskWrapper .optTrigger", function(evt){
    $(this).siblings(".mainOptions").fadeToggle(100);
    $(this).toggleClass("active");
    evt.stopPropagation();      
});

$("html").on("mousedown",function(){            
    $(".optTrigger").siblings(".mainOptions").hide();
    $(".optTrigger").removeClass("active");
});
4

1 に答える 1

1

問題は、さまざまなタイプのイベント ハンドラーを DOM 要素にアタッチすることにあります。

$("#tasksWrapper").on("click", ...
...
$("html").on("mousedown", ...

イベントの伝播clickは防止されますが、クリックでもイベントが発生しますmousedown

だから代わり$("html").on("mousedown", ...$("html").on("click", ...

于 2012-09-04T23:23:13.243 に答える