gpt4 book ai didi

javascript - 删除 onclick 函数中的事件监听器/onclick

转载 作者:行者123 更新时间:2023-12-01 02:59:34 27 4
gpt4 key购买 nike

我正在尝试删除一个函数中的事件监听器,该函数与 onclick 调用的函数相同。

下面的例子说明了我的问题。我尝试使用这种构造的原因是将函数传递给 View 对象,以便它可以将其作为 onclick 函数添加到创建的元素。

"use strict";

// Do I need var fun = function()... here or I could use only function fun() { ....}?
var fun = function(obj, num) {
alert(obj.id + ' ' + num);
obj.onclick = ""; // Version 1. This seems to work
//obj.removeEventListener('click', ); // Version 2. What should I add after the comma to remove EventListener?

}

setFn(fun);

function setFn(fn) {

var funct = fn;

var val = 10;
var elem = document.getElementById('test');
// The next function works with and without return. What are the differences? Are there any possible memory leaks?
elem.onclick = function() { funct(this, 11); }; // Version 1. Why in this case 'this' is not referring to the global 'window'?
//elem.addEventListener('click', function() {funct(this, val); }); // Version 2.
}

提前谢谢您。

最佳答案

要删除事件监听器,您需要传递与添加的完全相同的函数。

"use strict";

var fun = function(obj, num, originalEventHandler) {
alert(obj.id + ' ' + num);
obj.removeEventListener('click', originalEventHandler);
}

function setFn(fn) {
var element = document.getElementById('test');

element.addEventListener('click', function eventHandler() {
fn(this, 11, eventHandler);
});
}

setFn(fun);

这应该有效。

关于javascript - 删除 onclick 函数中的事件监听器/onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46534146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com