点击事件重复4次

时间:2013-01-15 01:43:21

标签: javascript jquery

我的代码

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”,我试图弄清楚为什么会这样做。经过几个小时的反复阅读我的代码,我想,让我们尝试删除点击事件,我错误地把那条线放在错误的地方(我猜是沮丧)。我跑了代码,中提琴!有效!怎么样?我不知道。

现在我的问题是,为什么在添加它之前取消绑定click事件会阻止进程重复自身?我真的很想知道为什么。 谢谢。

2 个答案:

答案 0 :(得分:2)

因为每当你的鼠标进入post.DivPostContent对象时,它就会将新的click事件绑定到你的链接对象;它触发了4次,因为你碾过了4次。

忘了.live& 。点击;使用.on并绑定一次&在您的mouseenter事件之外,或者如果您坚持将其绑定在那里,请使用.off之前

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

但是一次又一次地在你的鼠标之外做它

答案 1 :(得分:1)

  

现在我的问题是,为什么在添加它之前取消绑定click事件会阻止进程重复自身?

代码:

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

click事件添加回调,如果您多次注册,就像您的案例onmouseenter一样,您最终会多次触发相同的事件。

unbind函数删除了对特定事件的所有先前回调,因此这就是回调仅触发一次的原因。

顺便说一下,除非你的jQuery版本是1.4.3或更低版本,否则你不应该忘记live
使用{strong> 1.7 ore on版本提供的delegate版本 1.4.4。