zoukankan      html  css  js  c++  java
  • JQ中 trigger()和triggerHandler()区别

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

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

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

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

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

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

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

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

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

      特别是第二条,关于这个bug的 ticket。关于这个问题的 commit。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();

      

  • 相关阅读:
    再学 GDI+[91]: TGPImage(11) 转灰度图像
    再学 GDI+[90]: TGPImage(10) 获取图像的调色板信息
    给 Memo 排序的函数
    再学 GDI+[97]: TGPImage(17) 获取 GDI+ 所支持的可编码、可解码的图像格式
    再学 GDI+[94]: TGPImage(14) 增减图像的红、绿、蓝三色的成分
    上周热点回顾(10.2611.1)
    博客园上海俱乐部Windows 7社区发布活动的奖品
    顶吧!顶出今日头条
    博客园电子期刊2009年10月刊发布啦
    对于近期社区问题的一点想法
  • 原文地址:https://www.cnblogs.com/wymbk/p/5695868.html
Copyright © 2011-2022 走看看