详解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 相关文章推荐
Jquery 快速构建可拖曳的购物车DragDrop
Nov 30 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
Apr 19 Javascript
Javascript中各种trim的实现详细解析
Dec 10 Javascript
js中小数转换整数的方法
Jan 26 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 Javascript
JavaScript 保护变量不被随意修改的实现代码
Sep 27 Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 Javascript
JS将网址url转化为JSON格式的方法
Jul 02 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
Vue传参一箩筐(页面、组件)
Apr 04 Javascript
浅析vue插槽和作用域插槽的理解
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
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
15 个 JavaScript Web UI 库
2010/05/19 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python 文件管理实例详解
2015/11/10 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
python二维图制作的实例代码
2020/12/03 Python
Python实现疫情地图可视化
2021/02/05 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
J2EE面试题
2016/03/14 面试题
门店业绩提升方案
2014/06/08 职场文书
护理见习报告范文
2014/11/03 职场文书
《窃读记》教学反思
2016/02/18 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL