Javascript绑定事件的两种方式的区别 - Go语言中文社区

Javascript绑定事件的两种方式的区别


命名函数

<input type="button" onclick="check()" id="btn"/>
<script type="text/javascript">
    function check(){
        //code
    }
</script>

匿名函数

<input type="button"  id="btn"/>
<script type="text/javascript">
    window.onload = function(){
        //先获取元素对象,再绑定事件,绑定的是匿名函数不可重用
        var btn = document.getElementById("btn");
        btn.onclick = function(){
            //code
        }
    }
</script>

以前一直以为两种方式的区别不大,直到今天遇到这段代码

<img src="/path" id="img" onclick="change()"/>
<script type="text/javascript">
    //每次点击给图片地址后面加随机的查询参数
    function change(){
        this.src = "/path?num="+Math.random();
    }
</script>

运行后发现,点击后src没有变化,调试发现,这里this是window对象,而不是img标签对象。

顿时感觉有点迷惑,因为以前绑定事件中,拿标签属性都是用的this,怎么这里不对了?

原来是我搞混了,两种绑定方式的区别。

命名函数声明是窗口的对象中,this代表窗口对象。

匿名函数声明实际是在标签对象内部,this代表标签对象。

如果要在命名函数中拿到对应的元素对象,可以这样写

<input type="button" value="btn" onclick="change(this)">
<script type="text/html">
function change(element){
    element.value = "new_btn";  
}
</script>
版权声明:本文来源博客园,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.cnblogs.com/tianzhen45/p/11254639.html
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-11-17 14:54:54
  • 阅读 ( 1191 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢