1

私のコード

var post = {};
post.DivPostContent = $('.content');
post.DivPostContent.live({
    mouseenter:
        function()
        {
            var post_id = $(this).attr('data-post_id');
            var content_id = $('#content' + '_' + post_id);
            var link = $('#link' + '_' + post_id);
            content_id.find('.post_ratings').hide();
            content_id.find('.post_actions').show();
            //I removed the click event on a whim, i have no clue why it works
            link.unbind('click');
            link.click(function(){
                post.link_action(post_id);

            });


        },
    mouseleave:
        function()
        {
            //does something


        }
});

post.link_action = function(){
//Does some Ajax request
}

「リンク」から「post.link_action」と呼ばれるクリックイベントを4回アンバインドする前に、なぜそれが行われるのかを頭に入れようとしていました。何時間もコードを何度も読んだ後、私は自分自身に思いました。クリックイベントを削除してみてください。誤ってその行を間違った場所に配置しました(フラストレーションから)。私はコードを実行しました、そしてビオラ!機能した!どのように?私は見当もつかない。

ここで私の質問は、クリックイベントを追加する前にバインドを解除すると、プロセスが繰り返されなくなるのはなぜですか?本当にその理由を知りたいです。ありがとう。

4

2 に答える 2

2

マウスがオブジェクト post.DivPostContent に入るたびに、新しいクリック イベントがリンク オブジェクトにバインドされるためです。4回マウスオーバーしたため、4回トリガーされました。

忘れて.live & .click; 代わりに .on を使用し、mouseenter イベントの外側で 1 回バインドするか、そこにバインドすることを主張する場合は、前に .off を使用します。

 $elem.off("click").on("click",function() {});

しかし、一度、あなたのmousenterの外でそれをしてください

于 2013-01-15T01:49:38.157 に答える
1

私の質問は、クリックイベントを追加する前にバインドを解除すると、プロセスが繰り返されなくなるのはなぜですか?

コード:

link.click(function(){
    post.link_action(post_id);
});

複数回登録すると、イベントにコールバックが追加clickされます。あなたの場合のようにonmouseenter、同じイベントが複数回発生することになります。

このunbind関数は、特定のイベントに対する以前のコールバックをすべて削除するため、コールバックが 1 回だけ起動するのはこのためです。

ちなみに、jQuery のバージョンが 1.4.3 以下でない限り、 unsing を行うべきではありませんlive。バージョン1.4.4から利用できるバージョン1.7の 鉱石から利用できるもの
を使用してください。ondelegate

于 2013-01-15T01:53:34.740 に答える