Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
297 views
in Technique[技术] by (71.8m points)

如何解决addEventListener重复绑定的问题

我是用在vue的指令:

directives:{

        link:{
            componentUpdated:function (el) {
                let url = el.href;
                let shell = core.load_electron().load_shell();
                if (url.indexOf('http') === 0 || url.indexOf('https') === 0) {
                    var handler = function (e) {
                        e.preventDefault();
                        shell.openExternal(url)
                    };
                    el.removeEventListener('click', handler, false);
                    el.addEventListener('click', handler, false);
                }
            }
        }

    },

这段代码改变了a标签原来的click事件。现在造成的问题是,addEventListener多次绑定,导致事件重复执行。请问如何解决?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
el.removeEventListener('click', handler, false);

这里并不能移除上一次绑定的函数,原因是componentUpdated每次运行后本次handler函数与上一次handler函数并不是同一函数


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.7k users

...