• js事件代理


    需要注意的blog:http://blog.csdn.net/majian_1987/article/details/8591385

    一篇博客看懂  http://blog.csdn.net/majian_1987/article/details/8591385

    事件代理中明白ul li中的index。

    var targetNode = document.getElementById('list').getElementsByTagName('li');
        var i = 0;
        var targetLength = targetNode.length;
        for (i; i < targetLength; i++) {
            targetNode[i].onclick = (function(num) {
                return function() {
                        alert(num);
                }
            })(i);
        }
    window.onload = function(){
      var oUl = document.getElementById("ul");
      var aLi = oUl.getElementsByTagName("li");
       oUl.onclick = function(ev){ 
        var ev = ev || window.event;
        var target = ev.target || ev.srcElement;
             if(target.nodeName.toLowerCase() == "li"){
                 var that=target;
                 var index;
                 for(var i=0;i<aLi.length;i++)if(aLi[i]===target)index=i;
                 if(index>=0)alert('我的下标是第'+index+'');
                target.style.background = "red";
             }
         
       }
     
    }

    我以前只知道jquery的detegate方法可以给已知元素和未知元素添加事件,现在看看on这个方法的时候,也就知道了。

    $("ul").delegate("li", "click", function () {
            alert($(this).text());
        });

    on的参数和delete的参数是相反的。

    $('#data-list').on('click', 'li', function() {
        $('#data-show').html($(this).html());
    });

    live已经放弃了

    bind与delegate 与on

    bind绑定就是50的话,绑定50个,不能对未来的元素绑定,所以和普通的click方法是一样的。

    delegate的话,可以对未来的元素绑定,亦可以代理。

    on更全面一些。

    只能说这是一篇很好的文章:http://www.jb51.net/article/67166.htm

    js原生的事件代理:

    http://www.oschina.net/question/54100_25614

    https://www.douban.com/note/466024519/?type=like

    自己第一次写原生的事件代理:

    <ul id='list'>
            <li>first</li>
            <li>second</li>
            <li>third</li>
            <li>four</li>
            <li>five</li>
        </ul>
    function addEvent(elm, evType, fn, useCapture) {
            if (elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);//DOM2.0
            return true;
            }
            else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);//IE5+
            return r;
            }
            else {
            elm['on' + evType] = fn;//DOM 0
            }
        }
        var ss = $('#list')[0];
        var box =function(){
            alert(this.innerHTML);
        }
        addEvent(ss,'click',box);

    不过这个chrome和IE下this只的ul。

    这个原生的你看下:http://www.xiaobai8.com/Blog/464.html

    上边的这个还是没有解决在父类代理的情况下,怎么获取li的索引的问题 ,获取当前li的this的问题。

    下面自己写的这个解决了获得this的问题,但是没有解决索引的问题。我们可以又获取到的dom对象变为jquey对象获取索引方法。

    function addEvent(elm, evType, fn, useCapture) {
            if (elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);//DOM2.0
            return true;
            }
            else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);//IE5+
            return r;
            }
            else {
            elm['on' + evType] = fn;//DOM 0
            }
        }
        var ss = $('#list')[0];
        var box =function(e){
            var ev= e || window.e;
            var target=ev.target||ev.srcElement;//事件源
            var $li=target.nodeName.toLowerCase();
            if($li==="li"){
                alert(target.innerHTML);
            };
        }
        addEvent(ss,'click',box);
  • 相关阅读:
    矩阵快速幂 HDU3483
    欧拉函数 求小于某个数并与其互质的数的个数
    扩展欧几里德算法求逆元3
    拓展欧几里德算法求逆元2
    【20140113-2】MyEclipse生成javadoc时出错:编码GBK的不可映射字符
    【131202】SQL
    【20140113】package 与 import
    系统架构等级
    ora-01658 :无法为表空间USERS 中的段创建INITIAL区
    WMSYS.WM_CONCAT 函數的用法
  • 原文地址:https://www.cnblogs.com/coding4/p/5448604.html
Copyright © 2020-2023  润新知