南强小屋 Design By 杰米
javascript的事件模型,采用"冒泡"模式,子元素的事件会逐级向上"冒泡",成为父元素的事件。
在需要为较多的元素绑定事件时应该使用事件委托 event delegation
javascript事件传播
html如下:
<body> <table> <tr><td id="targetTd"></td><td></td><td></td></tr> <tr><td></td><td></td><td></td></tr> </table> </body>
添加脚本:
targetTd.onclick = function (event) { console.log("Td is clicked"); }; document.body.onclick = function (event) { console.log("Body is clicked"); };
点击td targetTd,结果如下:
Td is clicked Body is clicked
使用stopPropagation可以阻止事件的传播(ie下使用cancelBubble)
eg:
targetTd.onclick = function (event) { console.log("Td is clicked"); event.stopPropagation(); }; document.body.onclick = function (event) { console.log("Body is clicked"); };
点击td targetTd,结果如下:
Td is clicked
js事件委托
如果我们想给上面的table中所有的td添加点击事件,可以通过循环绑定,或者是采用事件委托方式,如下:
document.body.onclick = function (event) { if(event.target.tagName === "TD"){ console.log(event.target.tagName+" is clicked"); } };
jQuery事件委托
jquery 事件绑定 on 方法定义如下:
.on( events [, selector ] [, data ], handler(eventObject) )
取消事件的绑定可以使用off
$(document).off("click", "td");
给td绑定点击事件可以使用:
$("td").on("click", function(e){ console.log(e.target.tagName+" is clicked"); });
加入selector参数,使用事件委托
$("table").on("click", "td", function(){ console.log(e.target.tagName+" "); });
或者:
$(document).on("click", "td", function(){ console.log(e.target.tagName+" "); });
此时事件冒泡到document或者table时会监测是否是td selector,匹配时会触发事件
标签:
jquery,事件委托
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无jQuery事件委托代码实践详解的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?