我想调用函数onclick并将事件对象传递给函数:
progressBarOuter.onclick = function(e) {
var x; if (!e) {
x=window.event.clientX;
}
else {
x = e.clientX
}
yt.clickedOffset = x; yt.progressBarClicked
}
Run Code Online (Sandbox Code Playgroud)
所以我将clickedOffset分配给封闭对象(yt),然后调用progressBarClicked然后使用clickedOffset var.但我真正宁愿做的是这样的事情:
progressBarOuter.onclick = yt.progressBarClicked(e);
Run Code Online (Sandbox Code Playgroud)
因为它更紧凑.问题是,即使用户点击了或不执行这段代码... yt.progressBarClicked(e).
有没有办法解决?
您的:
progressBarOuter.onclick = yt.progressBarClicked(e);
Run Code Online (Sandbox Code Playgroud)
不会产生预期的结果,因为你并没有使用功能yt.progressBarClicked的onclick处理程序.您实际上正在调用该函数,因此将其返回值赋值给onclick.
你可以得到的最短的工作没有破坏任何东西是这样的:
progressBarOuter.onclick = function(e){
yt.progressBarClicked((e || window.event).clientX); // pass the x position as a parameter
};
Run Code Online (Sandbox Code Playgroud)
如果不包装它,yt.progressBarClicked将从window对象调用,因此this函数内部的值也将设置为该window对象.
当然,您还可以处理函数内部x位置的计算,并将事件传递给它:
progressBarOuter.onclick = function(e){yt.progressBarClicked(e);};
Run Code Online (Sandbox Code Playgroud)