jQuery中delegate()方法的用法详解


Posted in Javascript onOctober 13, 2016

delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。下面我们具体来了解一下。

语法结构:

代码如下:

$(selector).delegate(childofselector,type,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);
 }
 );
Javascript 相关文章推荐
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 Javascript
让Firefox支持event对象实现代码
Nov 07 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
Aug 13 Javascript
jquery 中的each()跳出循环的语句
May 23 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
使用控制台破解百小度一个月只准改一次名字
Aug 13 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
js 发布订阅模式的实例讲解
Sep 10 Javascript
基于JavaScript获取base64图片大小
Oct 18 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
May 13 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 Javascript
Vue管理系统前端之组件拆分封装详解
Aug 23 Javascript
炫酷的js手风琴效果
Oct 13 #Javascript
轻松搞定js表单验证
Oct 13 #Javascript
Seajs是什么及sea.js 由来,特点以及优势
Oct 13 #Javascript
使用jquery给指定的table动态添加一行、删除一行
Oct 13 #Javascript
jQuery旋转插件jqueryrotate用法详解
Oct 13 #Javascript
JS取模、取商及取整运算方法示例
Oct 13 #Javascript
JavaScript中常用的验证reg
Oct 13 #Javascript
You might like
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
初始Nodejs
2014/11/08 NodeJs
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
python中的字典详细介绍
2014/09/18 Python
用Eclipse写python程序
2018/02/10 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
公司营业员的自我评价
2014/03/04 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
python实现简易自习室座位预约系统
2021/06/30 Python
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL