博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JQ中 trigger()和triggerHandler()区别
阅读量:5269 次
发布时间:2019-06-14

本文共 953 字,大约阅读时间需要 3 分钟。

  

既然使用了trigger和triggerHandler,那么你应该了解了他们的差别了。

 

trigger():在每一个匹配的元素上触发某类事件。

triggerHandler():这个特别的方法将会触发指定的事件类型上所有绑定的处理函数。

 

看似两个非常相似,但是表同里不同!

下面就是他们之间的三大区别:

  第一:trigger会导致浏览器同名的默认行为的执行,如:trigger('submit');不但会执行submit()函数的效果,也会执行表单提交的效果;

     而triggerHandler就不会导致默认行为的执行

  第二:triggerHandler只会触发JQ对象集合中第一个元素的事件处理函数,也不会产生事件冒泡。而trigger不同

  第三:这个方法的返回时事件处理函数的返回值,而不是具有可链性的JQ对象,此外,如果最开始的JQ对象集合为空,则返回undefined.

 

  特别是第二条,关于这个bug的 ticket。关于这个问题的 ommit。jQuery自己实现了一个event对象用于解决浏览器间的差异问题。可是由于有mouseenter/mouseleave等非标准事件的存在,jQuery引入了special事件的子系统,让原生事件回到模拟事件的事件列队中,可是这个系统并不能解决所有问题,当使用trigger.focus时,IE下会错误地执行两次回调。

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

  

解决方法

  除了用triggerHandler另一个方法是在focus绑定事件中加上event.preventDefault()。

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

最终解决方法

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

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

  

转载于:https://www.cnblogs.com/mgqworks/p/7716434.html

你可能感兴趣的文章
C#与matlab参数调用(输出参数为两个不同类型的数组)
查看>>
PHP设计模式
查看>>
方法的动手动脑
查看>>
FineReport----日期处理
查看>>
IOS开发---菜鸟学习之路--(十二)-利用ASIHTTPRequest进行异步获取数据
查看>>
项目中遇到angular时间插件datetinepicker汉化问题
查看>>
设备管理
查看>>
CSS字体代码
查看>>
机器学习(周志华)——学习笔记1
查看>>
Spring Cloud 统一配置
查看>>
OO第二单元总结
查看>>
不成功的RMAN恢复到其他机器的例子
查看>>
oracle sql合计结果信息使用分组的小问题
查看>>
ES6中Set 和 Map用法
查看>>
购物车全屏移动
查看>>
洛谷P3847 [TJOI2007]调整队形
查看>>
loj #6029. 「雅礼集训 2017 Day1」市场
查看>>
hihocoder #1341 Constraint Checker
查看>>
HDU 5925 Coconuts
查看>>
S2SH整合步骤
查看>>