Nhờ Perfection kills, chúng ta có thể sử dụng JavaScript sau để phát hiện hỗ trợ sự kiện:Làm cách nào để phát hiện hỗ trợ `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;
}
này hoạt động trong khoảng thời gian duy nhất tôi cần nó: phát hiện mouseenter
hỗ trợ; hasEvent('mouseenter')
sẽ trả về false trong Chrome, Firefox, v.v.
Nhưng giờ tôi đang cố gắng "sửa" các trình duyệt không hỗ trợ các sự kiện focusin
và focusout
. According to PPK, về cơ bản chỉ là Firefox. Rất tiếc, Chrome và Safari được liệt kê là có hỗ trợ "không đầy đủ" vì lý do sau:
Safari và Chrome chỉ kích hoạt những sự kiện này với addEventListener; không phải với đăng ký truyền thống.
Nói chung, điều đó tốt; Tôi vẫn chỉ sử dụng addEventListener
. Tuy nhiên, số có nghĩa là có nghĩa là phát hiện hỗ trợ qua elem.onfocusin !== undefined
sẽ không hoạt động. Tôi đã thử nghiệm nó ra, và đó là sự thật:
<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>
Các cảnh báo trên No...
trong Chrome !! Có cách nào để phát hiện xem trình duyệt có hỗ trợ focusin
mà không sử dụng trình duyệt đánh hơi không?
có sự khác biệt giữa mouseenter và mouseover không? hoặc tập trung và tập trung? hoặc tập trung và làm mờ? – Ibu
@Ibu 'mouseenter' không bong bóng, trong khi' mouseover' có; 'focusin' /' focusout' * làm * bong bóng, 'focus' /' blur' thì không. – sdleihssirhc
Một thực tế quan trọng khác là đối tượng sự kiện focusin và focusout có thuộc tính 'relatedTarget' trỏ đến phần tử bị mất/nhận tiêu điểm. –