Как вы можете связать обработчик событий, только если он еще не существует?
У меня есть страница, на которую я хотел бы связать события перетаскивания. Я хотел бы, чтобы вся страница в браузере была целевой точкой, поэтому я привязал свои события к объекту 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);
});
Ответы
Ответ 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();
},
// ...
});