Javascript事件积累

时间:2011-07-20 03:18:29

标签: jquery javascript-events event-handling

在委派活动时遇到问题。看来,当我点击我的元素时,它们每次都在堆叠。第一次点击将工作一次,第二次点击将点击两次,依此类推,因为我点击了多次。任何想法为什么会发生这种情况?

以下是该剧本的实际片段:

$.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)点击当前元素

enter image description here

计数为3,当我点击$ this时会增加。 不知道为什么会这样,这里的任何帮助都会很棒。

点击后。

enter image description here

谢谢!

1 个答案:

答案 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();
    });

}