问答详情
源自:2-4 IE事件处理程序及跨浏览器解决

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

<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>

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

提问者:rainy_li3676598 2016-10-12 11:24

个回答

  • 冰糖雪梨_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语言里,你不论变量是什么类型(全局的还是函数里的),都设置为全局变量。那肯定是不合适的。所以你要把这个函数封装到某个对象里,调用的时候,对象.属性(或者方法)就可以了。

  • 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)