为了账号安全,请及时绑定邮箱和手机立即绑定

Onclick事件自动被调用

Onclick事件自动被调用

一只甜甜圈 2019-11-19 15:23:34
我写了一个JavaScript类MyClass,其中定义了一个方法closeThisMyClass = 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 回答

?
萧十郎

TA贡献1815条经验 获得超11个赞

您正在立即调用该函数。


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


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


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


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

相反,省去括号,然后将closeThis函数绑定到onclick。相反,这是说:


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


本质上,您是将函数分配给变量作为第一类对象,或者是对函数的引用。


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


document.getElementById("closeButton").onclick = 

    function() {

        myclassObj.closeThis();

    };


查看完整回答
反对 回复 2019-11-19
?
三国纷争

TA贡献1804条经验 获得超7个赞

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


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


查看完整回答
反对 回复 2019-11-19
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

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


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


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 737 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信