浏览器的聚焦
这又是一个老话题了, 不过最近在详写jQuery事件模拟的时候顺便又回顾了一次,做个记录巩固下吧
当然这里所说的问题都是在旧版本的浏览器中出现的兼容问题,首先从事件流谈起
通常支持事件冒泡(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的情况下,转化成事件捕获