分配onclick事件来运行

时间:2010-09-18 07:26:36

标签: javascript

我想调用函数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)。

有什么方法吗?

2 个答案:

答案 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)的计算。