jQuery事件委托代码实践详解

 更新时间:2019年06月21日 08:25:16   作者:wishyouhappy  
这篇文章主要介绍了jQuery事件委托代码实践详解, 事件委托是利用事件冒泡,只指定一个事件处理程序来管理某一类型的所有事件。,需要的朋友可以参考下

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 datatable服务端分页

    jquery datatable服务端分页

    这篇文章主要为大家详细介绍了jquery datatable服务端分页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • jQuery统计上传文件大小的方法

    jQuery统计上传文件大小的方法

    这篇文章主要介绍了jQuery统计上传文件大小的方法,主要通过ActiveXObject对象来实现,需要的朋友可以参考下
    2015-01-01
  • JQuery点击按钮跳转页面的方法

    JQuery点击按钮跳转页面的方法

    这篇文章主要介绍了JQuery点击按钮跳转页面的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • jquery 图片点击放大预览功能详解

    jquery 图片点击放大预览功能详解

    这篇文章主要介绍了jquery 图片点击放大预览功能,结合实例形式详细分析了jquery 图片点击放大预览功能相关实现步骤、
    2023-06-06
  • jQuery操作attr、prop、val()/text()/html()、class属性

    jQuery操作attr、prop、val()/text()/html()、class属性

    这篇文章主要介绍了jQuery操作attr、prop、val()/text()/html()、class属性 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 实例详解jQuery的链式编程风格

    实例详解jQuery的链式编程风格

    jQuery中的链式操作,它让代码变得更有层次更简洁,所以这篇文章主要给大家介绍了关于jQuery链式编程风格的相关资料,需要的朋友可以参考下
    2021-06-06
  • jQuery中:input选择器用法实例

    jQuery中:input选择器用法实例

    这篇文章主要介绍了jQuery中:input选择器用法,以实例形式较为详细的分析了:input选择器的功能、定义及匹配input元素时的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • 详解jquery事件delegate()的使用方法

    详解jquery事件delegate()的使用方法

    这篇文章主要详解了jquery事件delegate()的使用方法,delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合

    JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合

    在ajax中经常需要对元素的位置进行精确的定位,此时不仅需要获取元素自身的大小位置等属性。还需要知道页面、浏览器、滚动条等的长度和宽度。
    2010-01-01
  • JQuery 1.3.2以上版本中出现pareseerror错误的解决方法

    JQuery 1.3.2以上版本中出现pareseerror错误的解决方法

    最近正在做一个系统,测试组那边不停的报告bug:后台、前台各种列表报告js弹出窗错误,内容仅仅是一句“pareseerror”!
    2011-01-01

最新评论