function addHand(element,type,handler) 一样可以实现,为什么要多加一个变量并且用句柄?用句柄有什么好处

来源:2-4 IE事件处理程序及跨浏览器解决

rainy_li3676598

2016-10-12 11:24

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>无标题文档</title>

<script>

function showmes()

{alert("none");}

window.onload=function(){ 

var btn=document.getElementById("btn");

function addHand(element,type,handler)

   {

   if(element.addEventListener) 

      { element.addEventListener(type,handler,false);}

else if(element.attachEvent) 

 { element.attachEvent('on'+type,handler);}

else 

 { element['on'+type]=handler;}

    }


addHand(btn,'click',showmes);

}

</script>

</head>


<body>

<input type="button" value="按钮" id="btn">


</body>

</html>

想问一下大家,我 这样写一样可以实现,为什么要多加一个变量并且用句柄?用句柄有什么好处,说实话, 我感觉写句柄的格式怪怪的

写回答 关注

6回答

  • 冰糖雪梨_0004
    2017-10-05 12:03:21

    element.addEventListener是用来兼容非IE浏览器的,采用的是DOM2级事件处理方式  

    element.attachEvent是来兼容IE浏览器的  

    element["on"+type]=handler是在前两种都不兼容的情况下采用DOM0级事件处理(在现在浏览器中一般不会执行这里的代码)

  • 无敌小哥儿
    2017-03-24 00:01:55

    我又回来了。。。。建议大家看完慕课网教程之后看看书《javascript高级程序设计》。。。。在javascript语言中,一切皆对象,对象有属性和方法,这个句柄就是一个指向这个函数的指针。。添加的这个变量就是一个用字面量表示的对象。。。你用函数实现也可以,但是这个函数作用域是全局的。就像在C语言里,你不论变量是什么类型(全局的还是函数里的),都设置为全局变量。那肯定是不合适的。所以你要把这个函数封装到某个对象里,调用的时候,对象.属性(或者方法)就可以了。

    无敌小哥儿

    如果看不懂。。。快去看看书啊。。。当我看了几天书,我感觉我这一年在慕课网学的都白学了(当然,没这么夸张)!!

    2017-03-24 00:03:48

    共 1 条回复 >

  • wshyzx
    2017-03-18 00:07:28

    你找到满意的答案了吗?

  • 无敌小哥儿
    2016-11-06 12:09:54

    同求大神解答一下。。

  • 通灵宝玉129
    2016-10-12 13:48:35

    我也是第一次知道有句柄,这样封装和引用java库函数方法一样了,很好理解和使用

  • 慕粉1466842274
    2016-10-12 12:51:09

    兼容各大浏览器, element.attachEvent('on'+type,handler)是IE的; IE不支持element.addEventListener(type,handler,false)

    wshyzx

    你这说了等于没说

    2017-03-18 00:06:53

    共 1 条回复 >

DOM事件探秘

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

99545 学习 · 1197 问题

查看课程

相似问题