感謝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'屬性。 –