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

btn是一个按钮的节点名,那么btn.onclick="createa()";为什么不能再点击按钮时调用creata()函数呢?

// btn.onclick="createa()";

     btn.setAttribute("onclick", "createa()");

这两行代码为什么不是等价的?但是第二行代码测试可行!


正在回答

3 回答

是不是这个意思:对象.属性=值;如果一个函数没有返回值,是不能放在=右边的,

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

只能来自问自答了:

js是事件驱动的,一个节点可以发生很多种事件,包括click事件。在js中,当节点发生某一个事件时,可以为该事件绑定一个处理函数。也就是类似的

var btn=document.getElementById("myBtn")

btn.onclick = function(){createa(url,text)}

所要注意的是,这个节点的onclick属性(有人争议这是个事件,我也觉得应该是个事件),需要赋给一个函数类型的值(或者说应该给它绑定一个函数),才可以处理事件。

但是createa()并不是一个函数,你可以说你定义了一个名叫createa的函数,但createa()【也就是加了一对括号的createa】,是函数执行了之后的结果,createa()是等价于createa这个函数的返回值的。在createa函数里,只是给body内添加了一个a标签,并没有返回值,所以默认的结果就是undefined,也就是说非要给createa()确定一个值的话,把它打印出来就会显示undefined。

那么如果写成

btn.onclick =createa();

实际上是等价于

btn.onclick = undefined;

显然undefined是不能作为节点事件的处理函数的。

但是,也不是一定要加上function(){},你可以写成这样:

btn.onclick =createa;

虽然createa()不是函数,但createa却是函数,是可以作为节点事件的处理函数的,但是又因为这里定义的createa函数是需要两个参数的,所以直接调用的话,会造成函数没有参数传入,产生undefined的结果,还在考虑ing,有兴趣的同学可以回复我一起试验。


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

犀利一下下 提问者

已做完,可实现,提前在函数内做好参数设定就行了
2015-08-09 回复 有任何疑惑可以回复我~
#2

慕函数6472736 回复 犀利一下下 提问者

我此刻也遇到这个问题。3Q
2015-09-01 回复 有任何疑惑可以回复我~
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<script type="text/javascript">
var main = document.body;
//创建链接
 
function createa(url,text)
{
    var a=document.createElement("a");
    a.innerHTML=text;
    a.href=url
    a.style.color="red";
  main.appendChild(a);
    // window.open("http://www.imooc.com","_blank") 
}
// 调用函数创建链接
    var btn = document.createElement("input");
    btn.type="button";
    btn.value="显示慕课网链接";
   // var url="http://www.imooc.com";
    //text="慕课网";
    //btn.onclick=createa(url,text); 
    btn.onclick=createa('http://www.imooc.com','慕课网'); 
    //  btn.setAttribute("onclick", "createa('http://www.imooc.com','慕课网')");
    btn.style.backgroundColor="red";
    main.appendChild(btn); 
 
</script> 
</body>
</html>


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

犀利一下下 提问者

注释掉的部分是我自己试验做的,可以不用管,就看最后 btn.onclick=createa('http://www.imooc.com','慕课网'); // btn.setAttribute("onclick", "createa('http://www.imooc.com','慕课网')");这两行的区别就好了
2015-08-09 回复 有任何疑惑可以回复我~
#2

犀利一下下 提问者

问题中的btn.onclick="createa()"用法有错误,已经在上面贴的代码中作了修改,去掉了引号,因为onclick是事件,对应的应该是函数,不需要加引号。但是修改之后仍有新问题,就是没有点击按钮时直接就在网页中显示出来“慕课网”链接了,比较奇怪为什么会这样;但是用btn.setAttribute("onclick", "createa('http://www.imooc.com','慕课网')")的话就可以实现点击按钮之后再生成“慕课网”链接,所以想问问这两行代码再功能上的区别以及注意事项。
2015-08-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

btn是一个按钮的节点名,那么btn.onclick="createa()";为什么不能再点击按钮时调用creata()函数呢?

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