首页 > 代码库 > 浏览器的聚焦

浏览器的聚焦

这又是一个老话题了, 不过最近在详写jQuery事件模拟的时候顺便又回顾了一次,做个记录巩固下吧

当然这里所说的问题都是在旧版本的浏览器中出现的兼容问题,首先从事件流谈起

18221238-e1d2095f2ab94e2dae22f82ef454d094

通常支持事件冒泡(Event Bubbling)的事件类型为鼠标事件和键盘事件,例如:mouseover, mouseout, click, keydown, keypress

接口事件则通常不支持事件冒泡(Event Bubbling),例如:load, change, submit, focus, blur

focus/blur 在IE下是不持冒泡的,但是focusin/focusouts是支持冒泡了,可是火狐又不支持这2个事件

 

那么就好办了,focus/blur事件如果需要委托就换成focusin/focusouts代替,但是如果换成不支持focusin/focusouts的浏览器呢,比如火狐

事件流不是还有一个捕获吗?除了IE,现在流行的标准浏览器均支持

所以jQuery给出的最终解决方案是:

如果是IE下面,因为支持 focusin 和 focusout 事件,如果用了focus/blur实现冒泡的话就可以强制换成focusin 和 focusout

其余浏览器在不支持focusin/focusouts的情况下,转化成事件捕获

浏览器的聚焦