详解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 不能释放内存.
Sep 07 Javascript
JS 的应用开发初探(mootools)
Dec 19 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
jQuery中noConflict()用法实例分析
Feb 08 Javascript
JavaScript中Null与Undefined的区别解析
Jun 30 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
js实现带简单弹性运动的导航条
Feb 22 Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 Javascript
Vue使用localStorage存储数据的方法
May 27 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
Python自动化操作实现图例绘制
2020/07/09 Python
详解如何修改python中字典的键和值
2020/09/29 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
简历上的自我评价怎么写
2014/01/28 职场文书
校企合作协议书
2014/04/16 职场文书
建筑结构施工求职信
2014/07/11 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
师德师风剖析材料
2014/09/30 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
运动会宣传稿100字
2015/07/23 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Nginx配置文件详解以及优化建议指南
2021/09/15 Servers