当前位置: 首页 > 面试题库 >

Onclick事件自动被调用

贺佑运
2023-03-14
问题内容

我写了一个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。这有什么问题呢?


问题答案:

您正在立即调用该函数。

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

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

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

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

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

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

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

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

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


 类似资料:
  • 我正在使用JSF 2.0创建页面: 我期待在单击复选框时被调用。但是,加载页面时调用一次setMyCheckboxValue()。 如果我写 每次点击都会收到警报。 我的问题是:当我收到警报时,为什么每次onclick事件都不调用? 注意:我也尝试过AJAX,但复选框保持不变。

  • 我试图在RecyclerView中实现一个swipe来解除操作,但当我在ViewHolder中的任何视图上设置OnClickListener时,它将覆盖该视图上的所有OnTouch事件。 我可以放弃OnClickListener而在TouchListener中处理所有单击,但如果在RecycleView的子视图中有多个按钮,那么将会有大量代码,这看起来不是一个正确的方法。 在我的RecyleVie

  • 问题内容: 我想念一些东西。这是一个非常简单的问候世界,目标是仅触发警报事件onClick。该事件在页面加载时触发,但在单击按钮时不触发。感谢您的帮助。这是一个jsFiddle,使它更易于查看:jsFiddle 问题答案: 我认为您会犯错,因为ReactJS只是JavaScript,我认为触发此事件的方式不起作用。您的onClick应该触发一个附加到React元素的函数,就像这样。

  • 我正在用JSF做一个项目,遇到了以下问题。 当我创建以下跨度时: 它调用这个方法logout() 然而,在页面加载时,跨度内的onClick会被自动调用,如果我这样做: 并刷新页面,会话将无效。 有没有办法从span中调用方法“onClick”?我确实需要它是一个标签,这样我就可以正确使用引导图标元素。我知道onClick通常用于Javascript,但它与JSF一起使用似乎是合乎逻辑的。 编辑与

  • 问题内容: 我是python和Flask的新手。我有一个带按钮的Flask Web App。当我单击按钮时,我想执行python方法而不是Javascript方法。我怎样才能做到这一点? 我看过python的示例,它使用这样的表单标签将我重定向到新页面 但我不希望它将我重定向到新页面。我只希望它执行python方法。 我正在为Raspberry Pi机器人汽车制作这个。当我按下前进按钮时,我希望它

  • a.cs文件: 公共活动MyEventHandler Ontagload; 私有void btnLoad_Click(object sender,EventArgs e){if(OnTagLoad!=null){OnTagLoad(sender,e,runTimeData);}} 每当我单击Load按钮时,事件应该只触发一次。我们如何在windows窗体中实现这一点。 感谢你的帮助。