Подтвердить что ты не робот

Как вы можете связать обработчик событий, только если он еще не существует?

У меня есть страница, на которую я хотел бы связать события перетаскивания. Я хотел бы, чтобы вся страница в браузере была целевой точкой, поэтому я привязал свои события к объекту document. Однако содержимое моего приложения загружается в основную область содержимого через AJAX, и мне бы хотелось, чтобы эти обработчики событий были активны, когда в настоящее время отображается страница загрузки.

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

Соответствующий код, если он помогает:

$(document).bind('dragenter', function(e) {
    e.stopPropagation();
    e.preventDefault();
}).bind('dragover', function(e) {
    e.stopPropagation();
    e.preventDefault();
}).bind('drop', function(e) {
    e.stopPropagation();
    e.preventDefault();
    self._handleFileSelections(e.originalEvent.dataTransfer.files);
});
4b9b3361

Ответ 1

Отвяжите существующие обработчики событий, прежде чем связывать новые. Это действительно просто: события с именами [docs]:

$(document)
  .off('.upload') // remove all events in namespace upload
  .on({
      'dragenter.upload': function(e) {
          e.stopPropagation();
          e.preventDefault();
      },
      'dragover.upload': function(e) {
          e.stopPropagation();
          e.preventDefault();
      },
      // ...
  });