当前位置:首页 > CN2资讯 > 正文内容

js事件代理事件代理js

1天前CN2资讯


事件代理中明白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原生的事件代理:

​​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);






    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24627.html

    标签: js事件代理
    分享给朋友:

    “js事件代理事件代理js” 的相关文章

    RackNerd数据中心服务全面解析:选择适合您的VPS解决方案

    大家好,今天我们来聊聊RackNerd,这是一家非常有趣的数据中心服务公司。作为一个提供数据中心解决方案的企业,RackNerd在全球范围内拥有20个数据中心,主要分布在美国、加拿大、英国、荷兰、法国、德国、新加坡和爱尔兰等国。特别的是,RackNerd在美国的布局最为广泛,共有14个数据中心,这不...

    搬瓦工:性能卓越的VPS服务平台,为您的项目提供最佳选择

    搬瓦工概述 在网上冲浪的时候,大家可能都听说过“搬瓦工”,但对于它的真正含义了解的并不多。搬瓦工(BandwagonHost)是一家以提供虚拟私人服务器(VPS)而闻名的公司,采用KVM架构,深受用户青睐。我在使用搬瓦工的过程中发现,选择这个平台的用户不仅因为它的价格相对较低,还因为它提供的服务非常...

    全面解析UDP攻击:类型、影响及有效防御策略

    在当今网络环境中,UDP攻击是一个话题无法忽视的安全隐患。它是一种常见的网络攻击形式,通常会给目标服务器带来严重的资源消耗。为了更好地理解这一现象,我们不妨简单回顾一下UDP协议的特性,以及攻击者是如何利用这一协议实施攻击的。 UDP,即用户数据报协议(User Datagram Protocol)...

    ColoCrossing:优质VPS与安全托管服务提供商解析

    在美国,ColoCrossing作为一家老牌且独立的服务器和托管服务提供商,一直以来以其优质的IT解决方案著称。这家成立多年的公司,致力于满足不同类型客户的需求,无论是面向亚太地区还是欧美市场,它都有相应的数据中心来支持各种使用场景。我个人觉得他们的服务理念是非常值得推崇的,特别是在稳定性和可靠性方...

    如何找到便宜的域名并有效管理

    在了解便宜域名之前,首先我们要对“域名”这个概念有个清晰的认识。域名其实就是互联网上某个特定网站的地址。当我在浏览器中输入一个域名,比如“example.com”,就能顺利地找到对应的网站。简单来说,域名是你在网上的身份标识。而它的作用不仅是让用户更容易记住和访问你的网站,还能提升你品牌的可信度。...

    2023年VPS评测:选择适合您的虚拟私人服务器的指南

    在网络世界中,VPS代表虚拟私人服务器。简单来说,它是一种虚拟化技术,允许用户在一台物理服务器上运行多个虚拟服务器。每个VPS都有独立的操作系统和资源,用户可以专属管理和配置,像对待自己的服务器一样。这种灵活性使得VPS成为开发者、企业和个体户等各种用户的热门选择。无论是网站托管,还是应用程序的开发...