在委派活动时遇到问题。看来,当我点击我的元素时,它们每次都在堆叠。第一次点击将工作一次,第二次点击将点击两次,依此类推,因为我点击了多次。任何想法为什么会发生这种情况?
以下是该剧本的实际片段:
$.fn.multiselect = function() {
$this = this;
current = $(this).next('.multilist');
list = [];
count = 0;
$this.click(function() {
$(current).toggle();
$(current).find('a').click(function() {
event.stopPropagation()
$(this).toggleClass('active');
console.log(count++)
return false;
})
return false;
});
}
以下是count的控制台输出。 要返回的事件(请注意console.log在内部单击事件中
1)点击$ this以使用toggle()显示隐藏元素(当前) 2)再次单击$ this以使用toggle()隐藏元素(当前) 3)点击$ this另一个时间显示元素(当前)与toggle() 4)点击当前元素
计数为3,当我点击$ this时会增加。 不知道为什么会这样,这里的任何帮助都会很棒。
点击后。
谢谢!
答案 0 :(得分:0)
我认为您的问题是undelegate
位于正文点击功能内部,并使用$(this)
$('body').click(function() {
$(current).css({
display: 'none'
});
$(this).undelegate(this, 'click');
return false;
})
最好保存你的元素,然后用它来取消删除:
var $this = $(this);
$this.delegate('.filter', 'click', function(e) {
// ...
$('body').click(function() {
$(current).css({
display: 'none'
});
$this.undelegate('.filter', 'click');
return false;
})
更新:您的更新在点击功能中具有嵌套点击功能...它只会将点击事件绑定到链接。在这种情况下,我不确定为什么current
变量被保存但我无法确切地知道代码在做什么,所以也许jsFiddle.net上的一个孤立的演示会有所帮助。但是现在尝试删除嵌套的点击功能:
$.fn.multiselect = function() {
$(this).click(function(event) {
$(this).next('.multilist')
.toggle()
.find('a').toggleClass('active');
event.stopPropagation();
});
}