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


Posted in Javascript onJanuary 25, 2016

我们先看官方是怎么说delegate()方法,delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数,使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。
语法很简单

$(selector).delegate(childSelector,event,data,function)

参数说明

  • childSelector 必需。规定要附加事件处理程序的一个或多个子元素。
  • event 必需。规定附加到元素的一个或多个事件。
  • 由空格分隔多个事件值。必须是有效的事件。
  • data 可选。规定传递到函数的额外数据。
  • function 必需。规定当事件发生时运行的函数。

delegate 的函数是被某一类型的共同父元素调用。

listNode.delegate('.condition-remove','click',function(e){
e.preventDefault();
$(this).parents('.search-condition-item').remove();
});

完整实例(要实现的效果)

function renderSearchConditions(selectionId,conditions){var conditionsTemplate = '<div class="search-conditions-list-section">'+
'<ul class="search-conditions-list"></ul>'+
'</div>',
listNode = $(conditionsTemplate);
listItemTemplate = '<li class="search-condition-item" data-type="{conditonType}"><span>{condition}</span><a class="condition-remove" href="#">x</a></li>';
for(var key in conditions)
{
var condition = conditions[key].keyword,
conditionType = conditions[key].type,
listItemNode = $.substitute(listItemTemplate,{conditionType:conditionType,condition:condition});
listNode.append(listItemNode);
}
$(selectionId).prepend(listNode);
listNode.delegate('.condition-remove','click',function(e){
e.preventDefault();
$(this).parents('.search-condition-item').remove();

});
}

1.绑定的事务中,获取事务源,调用hide办法,并传入事务源对象:

$(document).delegate("body", "click", function(e) {
  var ev = e || window.event; // 事务
  //var target = ev.target || ev.srcElement; // 获得事务源
  hide(ev.target || ev.srcElement, true);
 });

底本用的$(window),然则IE8之前的,貌似有bug。
$(document)不好之处,页面加载完后,会触发一次...
2. hide办法中,断定该事务源是否从指定元素中发出,即事务源元素是不是指定元素的子元素或者其本身。

//子元素断定====
 if (!!window.find)HTMLElement.prototype.contains = function(B) {
  return this.compareDocumentPosition(B) - 19 > 0
 };
 function hide(dom, isClick) {
  var nn,t,_isClick = !!isClick;
  try {
   for (var n in objList) {
    nn = objList[n];
    t = nn.getOption("target")[0];
    if (_isClick && (t == dom || t.contains(dom)))return;
    if (!_isClick || !nn.box[0].contains(dom)) nn.hide();
   }
  } catch(e) {
  }
 }

3.上方的hide办法中,isClick变量 断定 是不是点击事务触发的。以便处理惩罚resize的。resize用settimeout作处理惩罚,降落内存消费。

var reTime = null;
 $(window).bind("resize", function() {
  if (reTime) clearTimeout(reTime);
  reTime = setTimeout(hide, 50);
 });

以上就是关于jquery事件delegate()的使用方法相关内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
js bind 函数 使用闭包保存执行上下文
Dec 26 Javascript
深入理解JavaScript系列(13) This? Yes,this!
Jan 18 Javascript
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
javascript表单验证 - Parsley.js使用和配置
Jan 25 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
Mar 19 Javascript
JavaScript判断是否为数组的3种方法及效率比较
Apr 01 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
Apr 06 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
js拼接html字符串的注意事项
Oct 13 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
如何编写一个d.ts文件的步骤详解
Apr 13 Javascript
Layer弹出层动态获取数据的方法
Aug 20 Javascript
AngularJS中的Directive实现延迟加载
Jan 25 #Javascript
AngularJS中的Directive自定义一个表格
Jan 25 #Javascript
理解JavaScript事件对象
Jan 25 #Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
Jan 25 #Javascript
学习JavaScript事件流和事件处理程序
Jan 25 #Javascript
javascript产生随机数方法汇总
Jan 25 #Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
Jan 25 #Javascript
You might like
松下Panasonic RF-B65电路分析
2021/03/02 无线电
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
vue.js中$set与数组更新方法
2018/03/08 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
Python实现的爬虫功能代码
2017/06/24 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
详解Python if-elif-else知识点
2018/06/11 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
财务工作个人求职的自我评价
2013/12/19 职场文书
演讲比赛策划方案
2014/06/11 职场文书
安全目标责任书
2014/07/22 职场文书
滞留工资返还协议书
2014/10/19 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
JS封装cavans多种滤镜组件
2022/02/15 Javascript
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers