我有一个页面,我想绑定拖放事件。我希望浏览器中的整个页面成为放置目标,所以我将事件绑定到文档对象。我的应用程序的内容通过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); });
解决方法
在绑定新的事件处理程序之前解除绑定。这是非常简单的
namespaced events [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(); },// ... });