zoukankan      html  css  js  c++  java
  • js addEventListener attachEvent用法

    路过http://tieba.baidu.com/f?kz=1059891418,发现个事件绑定js很精简,特记录下

    <script>
    function bind(o,e,f){
       var g=function(){f.apply(o,arguments)},
       k="__"+e;o[k]=o[k]||[],o[k][f]=g;
       !-[1,]?o.attachEvent("on"+e,g)
       :o.addEventListener(e,g,0);
    };
    
    function unbind(o,e,f){
       var k="__"+e,g;o[k]=o[k]||[],g=o[k][f];
       !-[1,]?o.detachEvent("on"+e,g)
       :o.remvoeEventListener(e,g,0||false);
       delete g;
    };
    
    bind(document,"click",function(e){
       var o=e.target||e.srcElement;
       alert(o.tagName);
    });
    </script>
    JavaScript

    解释:k="__"+e;o[k]=o[k]||[],o[k][f]=g;

    元素["__"+事件名][函数代码]=函数指针;这样就把一个函数以事件名和函数代码为索引保存在了元素里,"__"存在的目的只是为了让它不与元素的默认方法冲突

    !-[1,]//判断是否IE浏览器

    [1,]这个残缺的数组对IE而言是数组,而对其他浏览器而言是这个只是一个数字,前面的负号把这个强制转换成了数值型,而在IE中它不是一个数字因此是NaN,在其他浏览器中就是0-1也就是-1,-1实际上就是true的原型,然后再经过布尔运算-1变成false,NaN变成true

    实际上[1,]在转换成数值型的时候中间还有一个转换成字符型的过程,它调用的自己的默认方法toString,因此第一次返回的分别是一个字符型的"1"和字符型的"1,"

  • 相关阅读:
    js动态向li添加数据
    css实现立体字
    flex属性1
    Gluttonous Snake.css
    Gluttonous Snake.js
    Gluttonous Snake.html
    创建对象7种方法
    ORACLE数据库测试数据插入速度[z]
    maven打包不包含配置文件[z]
    互联网公司的面试官是如何360°无死角考察候选人的?[z]
  • 原文地址:https://www.cnblogs.com/knightyj/p/3471586.html
Copyright © 2011-2022 走看看