为什么jquery要设计focusin和focusout受冒泡影响呢?好处是什么?相比之下blur与focus不受冒泡影响不是更方便吗?
focus事件本身是不冒泡的,但是focusin可以,动态添加元素时,就不需重新绑定焦点事件,通过冒泡就能触发。即只要在父元素上添加focusin事件就相当于在子元素被点击时触发子元素的focus事件。
补充点。楼上说的这个好处呢,可以体现为性能的优化,假如没有事件的冒泡,你要处理子对象就要一个一个的去建立对象,当它可以在父类处理时,就只要一个对象就行了。不仅节约了内存,减少了对象的创建还减少了内存的处理时间。《js高级教程》可以看看
focusin当一个元素,或者其内部任何一个元素获得焦点的时候会触发这个事件。这跟focus事件区别在于,他可以在父元素上检测子元素获取焦点的情况。例如:
<p><input type="text" /> <span>focusout fire</span></p>
<p><input type="password" /> <span>focusout fire</span></p>jQuery 代码:
$("p").focusin(function() {
$(this).find("span").css('display','inline').fadeOut(1000);
});
focusout(fn)当一个元素,或者其内部任何一个元素失去焦点的时候会触发这个事件。这跟blur事件区别在于,他可以在父元素上检测子元素失去焦点的情况。
这就是focusin的好处之一,可以让父元素检测到子元素获取焦点的情况。比如
HTML 代码:
<p><input type="text" /> <span>focusout fire</span></p>
<p><input type="password" /> <span>focusout fire</span></p>
jQuery 代码:
$("p").focusin(function() {
$(this).find("span").css('display','inline').fadeOut(1000);
});