感谢Perfection kills,我们可以使用下面的JavaScript来检测事件支持:如何检测`focusin`支持?
function hasEvent(ev) {
var elem = document.createElement('a'),
type = 'on' + ev,
supported = elem[type] !== undefined;
if (!supported) {
elem.setAttribute(type, 'return;');
supported = typeof elem[type] === 'function';
}
elem = null;
return supported;
}
这适用于约我需要它唯一的一次:检测mouseenter
支持;因为它应该会在Chrome,Firefox等中返回错误hasEvent('mouseenter')
。
但现在我试图“修复”不支持focusin
和focusout
事件的浏览器。 According to PPK,这基本上只是Firefox。不幸的是,由于以下原因,Chrome和Safari被列为“不完整”支持:
Safari和Chrome仅通过addEventListener触发这些事件;而不是传统的注册。
一般来说,这很好;无论如何,我只会使用addEventListener
。它确实的意思,但是,通过elem.onfocusin !== undefined
检测支持将无法正常工作。我测试过它,这是真的:
<p>Do I support <a href="#">focusin</a>?</p>
<script>
var elem = document.getElementsByTagName('p')[0];
// hasEvent method defined here
function listener() {
var response = hasEvent('focusin') ? 'Yes!' : 'No...';
alert(response);
}
elem.addEventListener('focusin', listener, false);
</script>
以上提醒No...
在Chrome!有什么方法可以检测浏览器是否支持focusin
,而不使用浏览器嗅探?
mouseenter&mouseover有没有区别?或聚焦和聚焦?或聚焦和模糊? – Ibu
@Ibu'mouseenter'不会起泡,而“mouseover”会起泡; 'focusin' /'focusout' * do *泡泡,'focus' /'blur'不要。 – sdleihssirhc
另一个重要的事实是focusin和focusout事件对象具有指向已丢失/接收焦点的元素的'relatedTarget'属性。 –