Onclick 事件被自动调用

IT技术 javascript onclick
2021-02-10 21:37:15

我写了一个 JavaScript 类,MyClass在其中定义了一个方法closeThis

MyClass = function() {
  this.closeThis = function() {
    document.getElementById("hidePane").style.display = 'none';
  }
}

现在,在我的 html 中,我试图按如下方式调用它...

<script type="text/javascript">
  function callThis() {
    var myclassObj = new MyClass();
    document.getElementById("closeButton").onclick = myclassObj.closeThis();
  }
</script>

callThis当我点击一个按钮时,上面将被调用。这里的问题是,页面加载时会自动调用onclick顶部的事件clsoeButtion这可能有什么问题?

3个回答

您正在立即调用该函数。

当您在函数引用上留下括号时,您基本上是在说:

评估 closeThis 函数并将结果分配给 onclick

当您真正想要做的是将函数引用分配给点击处理程序时:

document.getElementById("closeButton").onclick = myclassObj.closeThis;

相反,省略括号,您会将 closeThis 函数绑定到 onclick。这反而说的是:

将函数 closeThis 分配给点击处理程序。

您实际上是将函数作为第一类对象或对函数的引用分配给变量。

顺便说一句,我个人的偏好是始终使用匿名函数包装器。有时您需要能够将参数传递到您的函数中,这确保您可以更轻松地这样做:

document.getElementById("closeButton").onclick = 
    function() {
        myclassObj.closeThis();
    };
谢谢@jmort253 它像魅力一样工作......你建议的第一种方法就像将结果分配给奇怪的 onclick 事件。第二种方法很酷。正如你所说,我现在仍然可以传递参数。非常感谢 :-)
2021-03-16 21:37:15

它应该是 document.getElementById("closeButton").onclick = myclassObj.closeThis;myclassObj.closeThis();

myclassObj.closeThis() 将调用该函数然后将值分配给 onclick

您需要从中删除()它,否则它会立即被调用,因为这就是您通过后缀调用函数的方式(),因此只需删除这些大括号:

document.getElementById("closeButton").onclick = myclassObj.closeThis;