详解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 相关文章推荐
javascript代码加载优化方法
Jan 30 Javascript
javasctipt如何显示几分钟前、几天前等
Apr 30 Javascript
JQuery表单验证插件EasyValidator用法分析
Nov 15 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
JavaScript数据类型详解
Apr 01 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
Jan 26 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
Jan 22 Javascript
详解Vue.js项目API、Router配置拆分实践
Mar 16 Javascript
浅析Vue 和微信小程序的区别、比较
Aug 03 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 Javascript
JavaScript Html实现移动端红包雨功能页面
Jan 10 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 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
PHP脚本的10个技巧(7)
2006/10/09 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
利用Python抓取行政区划码的方法
2016/11/28 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python 回溯法模板详解
2020/02/26 Python
详解Python 循环嵌套
2020/07/09 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
小学家长会邀请函
2014/01/23 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
异地年检委托书范本
2014/09/24 职场文书
实习单位证明范例
2014/11/17 职场文书
代理词怎么写
2015/05/25 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
Python关于OS文件目录处理的实例分享
2021/05/23 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python