Создание событий Javascript - PullRequest
0 голосов
/ 20 июля 2011

Возникла проблема с делегированием событий.Кажется, когда я нажимаю на свои элементы, они складываются каждый раз.Первый щелчок сработает один раз, второй - дважды, и т. Д. Столько раз, сколько я нажал.Любые идеи, почему это происходит?

Вот фактический фрагмент сценария:

$.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) Нажмите $, это другой раз показывать элемент (текущий) с toggle () 4) Нажмите текущий элемент

enter image description here

Количество было 3,который увеличится, когда я нажму на $ this.Не уверен, почему это происходит, любая помощь здесь будет отличной.

После нажатия.

enter image description here

Спасибо!

1 Ответ

0 голосов
/ 20 июля 2011

Думаю, ваша проблема в том, что 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();
    });

}
...