我将Javascript事件侦听器添加到一些html标记。我必须对不同的标签执行相同的处理。使用通用功能会很好。
(1)是否可以将变量传递给传递给addEventListener的函数。
const theNode = document.querySelector(
"div.action-bar:not(.usertip-mobile-action-bar) div.dropdown button.button-white");
theNode.addEventListener("click",
processClickReply,
false);
(2)在我的函数processClickReply中,“ this”是否表示“ theNode”?
答案 0 :(得分:1)
1:使用匿名函数:
theNode.addEventListener("click", function() { processClickReply(value) }, false);
2:是
答案 1 :(得分:1)
是否可以将变量传递给传递给addEventListener的函数。
是的,有两种方法:
1)通过闭包(但请注意,$request->only(['question', 'answer']);
现在在闭包中是this
,而不是在theNode
中,因此您可能想显式传递它-或记住它是在processClickReply
中)
evt.target
2)通过绑定(在这里我们可以将let myVar = 84;
theNode.addEventListener(
"click",
function(evt) {
processClickReply(evt, this, myVar);
},
false
);
显式设置为this
,将theNode
显式设置为第一个参数):
myVar
“ this”是否在我的函数processClickReply中引用“ theNode”?
在您的代码中,如果将let myVar = 84;
theNode.addEventListener(
"click",
processClickReply.bind(theNode, myVar),
false
);
声明为传统函数,则可以。如果它被定义为箭头函数,则为否。
在两种传递参数的方法中,您可以看到它们两种都如何破坏processClickReply
的自然约束力,以及可以采取哪些对策。
还要注意,绑定和闭包将为您提供不同的行为:如果以后更改this
,则更改将反映在闭包代码中;但是绑定代码当时使用myVar
的值。