详解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 28 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
js带点自动图片轮播幻灯片特效代码分享
Sep 07 Javascript
Bootstrap网格系统详解
Apr 26 Javascript
JavaScript实现自动切换图片代码
Oct 11 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
JavaScript实现倒计时跳转页面功能【实用】
Dec 13 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
Jan 13 Javascript
详解Angular2 关于*ngFor 嵌套循环
May 22 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 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中使用Oracle数据库(1)
2006/10/09 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
js中将字符串转换成json的三种方式
2011/01/12 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
Order by的几种用法
2013/06/16 面试题
高校毕业生登记表自我鉴定
2013/11/03 职场文书
运动会通讯稿500字
2014/02/20 职场文书
罚款通知怎么写
2015/04/22 职场文书
意外事故赔偿协议书
2016/03/22 职场文书