分配onclick事件来运行

Mik*_*gin 1 javascript

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

有没有办法解决?

Ivo*_*zel 6

您的:

progressBarOuter.onclick = yt.progressBarClicked(e);
Run Code Online (Sandbox Code Playgroud)

不会产生预期的结果,因为你并没有使用功能yt.progressBarClickedonclick处理程序.您实际上正在调用该函数,因此将其返回值赋值给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)