我有一个页面,我想绑定拖放事件。我希望浏览器中的整个页面成为放置目标,所以我将事件绑定到文档对象。我的应用程序的内容通过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();
- },// ...
- });