我想调用函数onclick并将事件对象传递给函数:
progressBarOuter.onclick = function(e) {
var x; if (!e) {
x=window.event.clientX;
}
else {
x = e.clientX
}
yt.clickedOffset = x; yt.progressBarClicked
}
所以我将clickedOffset分配给封闭对象(yt),然后调用progressBarClicked然后使用clickedOffset var。但我真正宁愿做的是这样的事情:
progressBarOuter.onclick = yt.progressBarClicked(e);
因为它更紧凑。问题是,即使用户点击了或不执行这段代码... yt.progressBarClicked(e)。
有什么方法吗?
答案 0 :(得分:6)
你的:
progressBarOuter.onclick = yt.progressBarClicked(e);
不会产生预期的结果,因为您没有将函数yt.progressBarClicked
分配给onclick
处理程序。您实际上正在调用该函数,因此将其返回值分配给onclick
。
你可以在不破坏任何东西的情况下获得最短的工作:
progressBarOuter.onclick = function(e){
yt.progressBarClicked((e || window.event).clientX); // pass the x position as a parameter
};
如果你不包装它,yt.progressBarClicked
将从window
对象调用,因此函数内this
的值也将设置为window
对象。
当然你也可以处理函数内部x位置的计算,然后将事件传递给它:
progressBarOuter.onclick = function(e){yt.progressBarClicked(e);};
答案 1 :(得分:1)
尝试
progressBarOuter.onclick = yt.progressBarClicked;
但从技术上讲,这与原始代码不同。完全没有鼠标位置(clientX)的计算。