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

为什么没有触发就自己运行了

  1. 为什么当页面加载时,就弹出了提示框?

  2. btn.onclick=function(){alert('hello')}就行?而btn.onclick=btn()就不行

正在回答

5 回答

因为tcon();表示是调用了这个方法,直接执行这个函数的代码,如过你把()去掉 就好了!

1 回复 有任何疑惑可以回复我~
#1

hcl哦了 提问者

非常感谢!
2016-03-20 回复 有任何疑惑可以回复我~
#2

没有情绪 回复 hcl哦了 提问者

不客气,共同进步。
2016-03-20 回复 有任何疑惑可以回复我~
#3

进击的小奇 回复 没有情绪

为啥去掉括号就可以了?请问这是啥原因哦?
2016-06-22 回复 有任何疑惑可以回复我~
#4

zhongjing

去掉()点击按钮没反应,怎么回事
2016-07-22 回复 有任何疑惑可以回复我~
查看1条回复

答案转   

简单点说,带括号的是函数调用,直接执行函数;不带括号的是绑定事件,事件触发再执行。

复杂点说,带括号的是把返回值赋值给事件,不带括号的是把函数体所在地址位置赋值给事件。

举个例子来说就是

<div id="a">函数括号那回事</div>
<input id="ip" type="button" value="点击变色">
<script type="text/javascript">
   function cc(){
       var a=document.getElementById("a");
       a.style.color="red";
   }
   function change(){
       var ip=document.getElementById("ip");
       //ip.onclick=cc;   //正常绑定事件,onclick触发执行
       ip.onclick=cc();   //调用cc,直接执行
   }
   change();  //调用change,直接执行
</script>

上面代码扔body里,2种挨个感受一下就知道了。

然后会有一个新问题,假如函数需要传参怎么办,这时候需要ip.onclick=function(){cc(obj);},理解方式一样,绑定一个函数,函数在触发onclick时执行,函数内容是执行cc。

如有错误,望指正


0 回复 有任何疑惑可以回复我~

您用的是什么软件,做前端.

0 回复 有任何疑惑可以回复我~

 btn.onclick=tcon()因为这一句是直接执行了,所以你没有触发就自己执行了


0 回复 有任何疑惑可以回复我~

btn.onclick=tcon(),你这句话表示调用tcon(),并把值赋给btn.onclick,肯定一加载就运行函数并赋值,你要点击再运行函数,要这样写<input type="button"  value="点点我" id="btn" onclick="tcon()"> 

0 回复 有任何疑惑可以回复我~
#1

hcl哦了 提问者

谢谢,但是你没明白,我想用这种方法实现功能,不在html中操作
2016-03-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么没有触发就自己运行了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信