jQuery - переписывать события? - PullRequest
2 голосов
/ 11 ноября 2009

Моя страница содержит некоторые перетаскиваемые элементы div ( не jQuery UI dragable).

Теперь мы хотим добавить новую функцию: пользователь должен иметь возможность выбирать более одного div одновременно и перетаскивать эти div элементы без запуска предыдущих связанных событий.

Теперь вот моя проблема:

Можно ли отключить события mousedown, mousemove и mouseup каждого div, если они являются частью выбора?

Так что в основном я хочу заменить старое событие новым и впоследствии восстановить исходные события.

Спасибо за ваше время


Обновление:

Я написал крошечный скрипт для проверки stopImmediatePropagation

jsBin demo

Со следующим кодом:

$("p").click(function(event){
  alert ( ' I am the old event ' );
});

$("a").click( function()
{

   $("p").click(function(event){
     event.stopImmediatePropagation();
     alert ( ' I am the new event ' );
   });


return false;
});

Не работает, так как event.stopImmediatePropagation(); вызывается после первого события. Итак, результат:

Я старое событие

Я новое событие

Ответы [ 2 ]

4 голосов
/ 11 ноября 2009

Вы можете взглянуть на event.stopImmediatePropagation().

Смотрите здесь в jQuery документах

По сути, вы заставляете одну функцию дополнительно блокировать запуск других функций - вам не нужно удалять и перепривязывать функции.


Вот ваш код из JSBin, который я модифицировал, чтобы он работал. Это немного глупо и, вероятно, не очень эффективно, но работает!

$("p").click(function(event){
  alert ( ' I am the old event ' );
});

$("a").click( function() {
  $("p").each(function() {
    var $t = $(this);
    var events = $t.data("events");
    $t.unbind('click');
    $t.click(function(event){
      event.stopImmediatePropagation();
      alert ( ' I am the new event ' );
    });
    for (var i = 0, l = events.length; i < l; ++i) {
      $t.click(events[i]);
    }
  });
  return false;
});
0 голосов
/ 11 ноября 2009

Разве вы не можете просто unbind() событие?

См. jQuery документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...