不要使用jQuery触发原生事件的方法


Posted in Javascript onMarch 03, 2014

JavaScript 框架提供了如此多的功能,以至于一不小心就会掉进坑里去。 对工具库依赖得越多,在修改或维护时一个小小的改的很可能就会影响到其他的功能(俗称 处处是地雷,走路需谨慎),特别是维护多年前的遗留代码时。 我经常看到的一个错误是关于 jQuery的 trigger, trigger允许开发者手动触发某些事件。 这个功能真的非常强大与好用,但是请遵守约定,不要触发JS中那些原生的事件名称!
注:我知道,其他JS框架也提供这种功能 —— 我只用jQuery作为一个例子,因为我看到了它的受欢迎程度,最近又刚好碰上这个问题。 而所有工具类库都有可能引发同样的问题。 比如 MooTools使用 的 fireEvent 等。
下面是使用 trigger 来完成任务的一个典型例子:

// 监听 click 事件 
jQuery('.tabs a').on('click', function() { 
// 执行某些操作,比如切换界面,加载内容等.. 
}); // 在最后一个 a 标签上触发 click 事件 
jQuery('.tabs a').last().trigger('click');

上面的代码将会打开给定index的tab标签。 我完全理解开发者使用 trigger 来处理这些事情的原因,通常是因为要触发的函数在全局范围内不可用,而触发事件是很容易的,也总是可用的。 问题是,使用原生的事件名称来触发可能 ... 触发 ... 一些无法言说的伤。让我们来看看在网站的其他地方添加的内容:
// 监听 body 内部的所有 click 事件 
jQuery('body').on('click', 'a', function() { 
// 此处可以进行一些业务逻辑处理 ... // 满足条件(Condition met), 则进行另外一些操作! 
if(conditionMet) { 
// 刷新页面? 
// 打开子菜单? 
// 提交表单? 
// ... 灯灯蹬蹬,Intel 
} 
});

现在有一个问题 —— 选项卡单击事件可能被其他完全独立的部分监听着,这处理起来就比较麻烦。 呵呵,最好的解决方案是使用一个自定义的事件名称跟在原生事件后面:
// 监听 click 事件时,带上自定义的事件 
jQuery('.tabs a').on('click tabs-click', function() { 
// 切换 tab, 加载内容,等等等等 ... 
}); // 在最后一个标签上触发 "假" 的事件 
jQuery('.tabs a').last().trigger('tabs-click');

现在你的事件触发器将不再和页面上的其他监听器起冲突。 保守的开发人员对我说,你可能想要避免使用 trigger (其他工具库也是一样的),但好歹你也应该添加一个自定义事件名称!
Javascript 相关文章推荐
FireFox与IE 下js兼容触发click事件的代码
Nov 20 Javascript
JQuery优缺点分析说明
Jun 09 Javascript
Javascript中Array.prototype.map()详解
Oct 22 Javascript
10个JavaScript中易犯小错误
Feb 14 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
jQuery实现遍历复选框的方法示例
Mar 06 Javascript
jQuery实现鼠标经过显示动画边框特效
Mar 24 jQuery
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
vue+axios实现登录拦截的实例代码
May 22 Javascript
Vue动态组件实例解析
Aug 20 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
Dec 27 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
Sep 14 Javascript
jquery实现点击消失的代码
Mar 03 #Javascript
jquery提交form表单简单示例分享
Mar 03 #Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
Mar 03 #Javascript
js函数在frame中的相互调用详解
Mar 03 #Javascript
window.onload追加函数使用示例
Mar 03 #Javascript
js this函数调用无需再次抓获id,name或标签名
Mar 03 #Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 #Javascript
You might like
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
js中eval详解
2012/03/30 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
python装饰器decorator介绍
2014/11/21 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
python super用法及原理详解
2020/01/20 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
python实现网页录音效果
2020/10/26 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
劳资员岗位职责
2013/11/11 职场文书
总经理办公室主任岗位职责
2013/11/12 职场文书
计算机求职信
2013/12/01 职场文书
安全教育感言
2014/03/04 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
中英文求职信范文
2015/03/19 职场文书
通知的格式范文
2015/04/27 职场文书
离婚案件原告代理词
2015/05/23 职场文书
导游词之阆中古城
2019/12/23 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python