Отключите все обработчики событий, сделайте что-нибудь, а затем снова выполните привязку с помощью jquery

Я попытался сохранить весь обработчик событий элемента, затем отвязать их, затем сделать что-то, а затем снова привязать, но, по-видимому, переменная с обработчиками изменяется на пустой объект, когда я отключаю обработчики

  var events = $._data(this.$element.get(0), 'events');
  console.log(events);    //here the variable events contains an object with the handlers
  this.$element.unbind();
  console.log(events);   //here the variable events contains an empty object

  //function to bind again the handlers
  $.each(events, function() {
    // iterate registered handler of original
    $.each(this, function() {
      $('#target').bind(this.type, this.handler);
    });
  });

person chagovelez1    schedule 03.05.2014    source источник
comment
Вам нужно сделать копию объекта events. См. stackoverflow.com / questions / 728360 /   -  person Barmar    schedule 03.05.2014


Ответы (1)


Вы можете использовать extend в глубоком режиме для копирования данных в events:

var events = $._data(this.$element.get(0), 'events'),
    eventsCopy = $.extend(true, {}, events);
this.$element.unbind();
$.each(eventsCopy, function() {
    $.each(this, function() {
        $('#target').bind(this.type, this.handler);
    });
});
person Oriol    schedule 03.05.2014