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事件会阻止进程重复自身?我真的很想知道为什么。 谢谢。
答案 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。