js中使用闭包for循环多次执行,清除重复操作

drop : function(event, ui) {//拖拽期间触发  
    var ud = ui.helper;  
    var doubleTapImg = ud;  
    for (var i=0;i<doubleTapImg.length;i++) {  
        (function(doubleTapImg) {  
            var _flag = true;  
            Transform(doubleTapImg);  
            new AlloyFinger(doubleTapImg, {  
                doubleTap:function(evt){  
                    alert("第三次");//双击事件重复执行  
                    if(_flag){  
                        _flag = false;  
                        alert("fangda");  
                        evt.preventDefault();  
                    } else {  
                        _flag = true;  
                        alert("suoxiao");  
                        evt.preventDefault();  
                    }  
                }  
            });  
        })(doubleTapImg[i]);  
    }  
}

每拖动一次没有双击,就会保留,
如果我拖动拖动5次,前面4次都没有执行双击,最后一次执行双击就会弹出五次alert("第三次");

阅读 2.4k
1 个回答

看样子,每一次 drop 都会 new 一堆 AlloyFinger,但是这段代码并没有体现什么时候会把 new AlloyFinger 生成的东西清除,实际上,生成的东西可能会被垃圾回收,但是绑定的事件会一直保留。
所以要快速解决这个问题的话,就是在开始 for 循环之前,把上一次 new AlloyFinger 绑定的 doubleTap 全部取消。
问题是解决了,但其实在事件回调中频繁绑定/解绑其他的事件是一种不好的实现,当然,一般场景下没大问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题