对于addEventListener的回调,我注意到了function和function()之间的区别。在我尝试传递一个参数之前,这不是一个问题。基本上,
element.addEventListener("hover", logInput, false );
function logInput(){
console.log('registered!');
}按预期工作,但添加括号将使其立即进行日志记录,而不会持续响应事件触发器:
element.addEventListener("hover", logInput(), false );
function logInput(){
console.log('registered!');
}为什么会这样呢?以及如何在传递参数时使其工作,例如:
element.addEventListener("hover", logOnInput(this), false );
function logOnInput(triggeredElement){
console.log(triggeredElement);
}发布于 2016-02-10 04:09:22
(如果您真的想要已触发的元素,不要传递任何内容。this将自动设置为已触发的元素。)
element.addEventListener("hover", logOnInput, false);
function logOnInput(){
console.log(this);
}回答你更一般性的问题.
有几种方法可以将函数作为参数传递给已经设置的某些参数(这称为“部分应用程序”)。如果您能够使用现代JavaScript特性,最简单的方法可能是使用箭头函数。
element.addEventListener("hover", () => logOnInput(foo), false);
function logOnInput(message){
console.log(message);
}这将只适用于非常现代的浏览器。例如,在IE11中,它不能工作。为了支持旧的浏览器,您可以使用函数表达式的更长的形式。
element.addEventListener("hover", function() {logOnInput(foo);}, false);
function logOnInput(message){
console.log(message);
}或者您可以定义一个单独的函数(不适用于this,而是使用其他变量)。
element.addEventListener("hover", logFooOnInput, false);
function logOnInput(triggeredElement){
console.log(triggeredElement);
}
function logFooOnInput() {
logOnInput(foo);
}或者你可以用bind。
element.addEventListener("hover", logOnInput.bind(null, foo), false);
function logOnInput(message){
console.log(message);
}发布于 2016-02-10 04:14:23
它是一个javascript,当您想调用一个使用括号的函数时。没有括号外的函数是无用的。但是在作为参数的函数内部,您使用没有括号的函数,以便当该事件发生时,只有它才会运行。如果使用函数参数内的括号调用函数,它将立即执行,并且在事件发生时也会运行。要调用函数中的参数并在此情况下调用函数,需要使用如下所示的绑定方法:
element.addEventListener("hover", logOnInput.bind(null, argument1, argument2, etc), false );但是,如果您想选择上下文作为this,那么我建议您这样使用:
function logOnInput(elem,arguments) {
//now you can use **elem** to refer **this**
}并对悬停事件使用匿名函数,如下所示:
element.addEventListener("hover", function(){
logOnInput(this,arguments)
}, false );发布于 2016-09-25 17:04:42
如果您只针对现代浏览器,那么绑定函数可能是最干净的选项。一些博客谈到了绑定与匿名函数相比性能的损失。一些博客对匿名函数有不好的评论。匿名功能。在addEventListener上传递参数一切都很顺利。但是,当您到达removeEventListener时,传递参数的方式将不像在addEventListener中那样工作。我在2005年找到了这个家伙,答案是:http://www.codingforums.com/dom-and-json-scripting/5909-how-pass-arguments-independently-using-addeventlistener.html
在简历中,将匿名函数设置为等于新声明的“事物”。如果这是变量或表达式,则为Idk。我测试了瓦尔,这是行不通的。在这一点上仔细考虑一下这方面的技术细节,但它是可行的。
function addhoverIn(SELECTED) {
SELECTED.addEventListener("mouseover", addHIn = function() { hoverIn(SELECTED); }, false);
}
function hoverIn(SELECTED) {
SELECTED.removeEventListener("mouseover", addHIn, false);
}https://stackoverflow.com/questions/35306597
复制相似问题