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

发布于 2022-09-12 03:09:37 字数 940 浏览 7 评论 0

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("第三次");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与之呼应 2022-09-19 03:09:37

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文