为什么要从focus()更改为触发('focus')?

时间:2015-04-07 22:20:19

标签: javascript jquery twitter-bootstrap

我在bootstrap中浏览了dropdown.js的历史记录,并在git here上遇到了以下更改历史记录文件:

$this.focus()   // focus() being changed to trigger('focus');
$this.trigger('focus')

现在,这里的人已经对这一变化发表了评论:

  

使用自定义jQuery构建排除事件的人生活   别名更容易。

我不太清楚使用focus()trigger('focus')之间的区别是什么,因为对我来说两者都有相同的效果;为什么作者选择了这样的改变?

2 个答案:

答案 0 :(得分:6)

https://github.com/jquery/jquery#modules

如果您正在制作自定义jQuery构建并排除event/alias模块 - 您将没有事件的快捷方式(例如.click().focus().ready()等)

因此,您必须使用.on('eventName', handler)进行事件绑定,然后使用.trigger('eventName')来触发jQuery事件。

答案 1 :(得分:3)

拥有自定义jQuery构建的人可以创建或修改自己的focus()函数,以实现他们想要的任何功能。想象一下,如果你创建自己的focus(),它允许很多参数并链接多个回调;将它的用法与jQuery focus()基本函数结合起来会很麻烦。

当您使用触发器时,显然您将触发一个动作。在这种情况下,要集中一个元素。

除此之外,使用trigger()函数使代码更容易理解。