window.onload匿名函数中element.onclick正确用法

先看下面有问题的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多个window.onload方法解决方案</title>
    <style type="text/css">
        /*为div元素设置CSS样式*/
        #div1{border-width: 3px;border-style: double;
              border-color: bisque;
              font-size: large;
              height: 80px;width: 150px;
              background-color: cornflowerblue;
              text-align: center;}
    </style>
    <script type="text/javascript">
        //克隆div节点,并更改克隆出的div文本内容
        window.onload = function () {
            var oDiv = document.getElementById("div1");
            function copyNode() {
                var newDivNode = oDiv.cloneNode();//此处没有参数true
                newDivNode.innerHTML = "I was cloned!";
                newDivNode.style.backgroundColor = "#FFA500";
                var parentNode = oDiv.parentNode;
                parentNode.appendChild(newDivNode);
            }
            oDiv.onclick = copyNode();
        }
    </script>
</head>
<body>
    <div id="div1">I am div1</div>
</body>
</html>

执行代码的结果:
在这里插入图片描述代码执行后,还没有点击div,页面就自动克隆了一个div。而且此时不能够通过点击div克隆更多新的div元素。
具体的底层逻辑是:

oDiv.onclick = copyNode();

在上面这行代码中——
由于copyNode()函数有小括号“()”,所以上面这行代码的含义是"调用"copyNode()函数,而不是“绑定”函数。
因此在oDiv上正确绑定函数的方法是:

oDiv.onclick = copyNode;


第1种改进代码方式:
将原来的:
oDiv.onclick = copyNode();

修改为:

oDiv.onclick = copyNode;

将小括号去掉,就能够使代码正常运行。
此种代码方式的弊端:没有考虑到如果小括号()中需要传递参数的情况。

第2种改进代码方式:

将原来的:

oDiv.onclick = copyNode();

修改为:

oDiv.onclick = function () {
                copyNode();
}

先将copyNode();函数放进一个匿名函数中,再将匿名函数通过onclick关键字绑定到oDiv上。

第3种改进代码方式:

<script type="text/javascript">
        //克隆div节点,并更改克隆出的div文本内容
        window.onload = function () {
            var oDiv = document.getElementById("div1");
            oDiv.onclick = function () {
                var newDivNode = oDiv.cloneNode();//此处没有参数true
                newDivNode.innerHTML = "I was cloned!";
                newDivNode.style.backgroundColor = "#FFA500";
                var parentNode = oDiv.parentNode;
                parentNode.appendChild(newDivNode);
            }
        }
    </script>

直接将需要通过onclick关键字绑定到oDiv元素上的方法以匿名函数的形式存在。
这种方式是程序员最常用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值