【发布时间】:2016-09-23 19:55:35
【问题描述】:
我有一些示例代码绑定了一个事件处理程序,如下所示:
var h1=document.querySelector('h1');
h1.onclick=doit;
function doit(x) {
console.log(x);
}
当事件处理程序被触发时(通过点击h1 元素),输出是一个event 对象,正如预期的那样。
如果我按如下方式绑定事件处理程序:
h1.onclick=doit.bind(h1);
我得到了同样的结果。
但是,如果我按如下方式绑定它:
h1.onclick=doit.bind(h1,1);
我得到1,h1 之后的第一个参数。在所有情况下,this 的值都正确设置为h1,但在最后一种情况下,传递的参数似乎替换预期的事件对象。
如何在不将事件处理程序重写为函数表达式的情况下保留事件对象?
【问题讨论】:
-
它不会替换它,它会 precede 它(事件将作为第二个参数传递)。但是,如果您希望在第一个参数中包含事件,请不要部分应用该函数(不要给它
bind参数)。
标签: javascript events eventhandler event-listener function-binding