jquery trigger函数执行两次的解决方法


Posted in Javascript onFebruary 29, 2016

本文实例讲述了jquery trigger函数执行两次的解决方法。分享给大家供大家参考,具体如下:

一、问题如下:

有如下代码:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
*{margin:0;padding:0;}    
body { font-size: 13px; line-height: 130%; padding: 60px; }
p {width:200px;background:#888;color:white;height:16px;}
</style>
<script src="jquery-1.6.4.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
  $('#old').bind("click", function(){
        $("input").trigger("focus");
    });
    $('#new').bind("click", function(){
      $("input").triggerHandler("focus");
    });
    $("input").focus(function(){
  $("body").append("<p>focus.</p>");
})
});
</script>
</head>
<body>
<button id="old">trigger</button>
<button id="new">triggerHandler</button>
<input />
</body>
</html>

这里的函数:

$('#old').bind("click", function(){
$("input").trigger("focus");
});

在火狐只触发一次,即输出一个focus;

但是在ie触发了两次,即同时输出了两个focus;

二、解决方法:

首先分析一下trigger和triggerHandler。使用triggerHandler不会触发浏览器的默认事件,不会产生事件冒泡(其他区别看jQuery文档)。关于这个bug的 ticket。关于这个问题的 commit。jQuery自己实现了一个event对象用于解决浏览器间的差异问题。可是由于有mouseenter/mouseleave等非标准事件的存在,jQuery引入了special事件的子系统,让原生事件回到模拟事件的事件列队中,可是这个系统并不能解决所有问题,当使用trigger.focus时,IE下会错误地执行两次回调。

triggerHandler是对trigger产生这种问题的解决方法。但是使用triggerHandler时你会发现input是没有光标focus效果的。

jquery trigger函数执行两次的解决方法

初步解决方法:

除了用triggerHandler另一个方法是在focus绑定事件中加上:

event.preventDefault()

可是你发现这不符合我们的期望呀,因为focus事件回调执行了,但是连个focus效果都没有。

最终解决方法:

既然是jQuery封装的关系,那我们用原生的事件就可以了。看演示,左边是用原生事件触发的,右边用triggerHandler。

$('input')[0].focus();

jquery trigger函数执行两次的解决方法

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
给artDialog 5.02 增加ajax get功能详细介绍
Nov 13 Javascript
javascript控制台详解
Jun 25 Javascript
JS产生随机数的几个用法详解
Jun 22 Javascript
AngularJs页面筛选标签小功能
Aug 01 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
微信小程序将字符串生成二维码图片的操作方法
Jul 17 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
解决Vue router-link绑定事件不生效的问题
Jul 22 Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 29 Javascript
基于vue hash模式微信分享#号的解决
Sep 07 Javascript
Echarts如何重新渲染实例详解
May 30 Javascript
理解js回收机制通俗易懂版
Feb 29 #Javascript
jquery trigger实现联动的方法
Feb 29 #Javascript
基于Javascript实现返回顶部按钮
Feb 29 #Javascript
JavaScript实现斗地主游戏的思路
Feb 29 #Javascript
jQuery取消特定的click事件
Feb 29 #Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 #Javascript
JS三级可折叠菜单实现方法
Feb 29 #Javascript
You might like
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
利用python画出AUC曲线的实例
2020/02/28 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
七年级上册语文教学计划
2015/01/22 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python