Благодаря совершенным убийствам мы можем использовать следующий код JavaScript для обнаружения поддержка мероприятия:
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
; hasEvent('mouseenter')
вернет false в Chrome, Firefox и т. д., как и должно быть.
Но теперь я пытаюсь исправить браузеры, которые не поддерживают события focusin
и focusout
. Согласно 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
делает;focusin
/focusout
делать пузырь,focus
/blur
не делать. - person sdleihssirhc   schedule 07.09.2011relatedTarget
, которое указывает на элемент, потерявший/получивший фокус. - person Dmitry Pashkevich   schedule 25.02.2013