Это, вероятно, не то, что вы хотите услышать, но единственный способ сделать это, похоже, вручную отследить, сфокусирован элемент или нет.Например ( скрипка здесь ):
var blurCount = 0;
document.getElementsByTagName('input')[0].onblur = function(e) {
if (!e) e = window.event;
console.log('blur', e);
if (!(e.target || e.srcElement)['data-focused']) return;
(e.target || e.srcElement)['data-focused'] = false;
document.getElementsByTagName('div')[0].innerHTML = (++blurCount + ' blurs');
};
document.getElementsByTagName('input')[0].onfocus = function(e) {
if (!e) e = window.event;
console.log('focus', e);
(e.target || e.srcElement)['data-focused'] = true;
};
Интересно, я не мог заставить это работать в jQuery ( скрипка здесь ) ... Я действительно не понимаюНе пользуетесь jQuery, может, я здесь что-то не так делаю?
var blurCount = 0;
$('input').blur(function(e) {
console.log('blur', e);
if (!(e.target || e.srcElement)['data-focused']) return;
(e.target || e.srcElement)['data-focused'] = false;
$('div').innerHTML = (++blurCount + ' blurs');
});
$('input').focus(function(e) {
console.log('focus', e);
(e.target || e.srcElement)['data-focused'] = true;
});
Вы также можете попробовать сравнить цель события с document.activeElement
.В этом примере будут игнорироваться события размытия alt + tab и события размытия, возникающие в результате нажатия на Chrome ... chrome.Это может быть полезно в зависимости от ситуации.Если пользователь alt + вкладывает обратно в Chrome, это выглядит так, как будто окно никогда не теряет фокус ( fiddle ).
var blurCount = 0;
document.getElementsByTagName('input')[0].onblur = function(e) {
if (!e) e = window.event;
console.log('blur', e, document.activeElement, (e.target || e.srcElement));
if ((e.target || e.srcElement) == document.activeElement) return;
document.getElementsByTagName('div')[0].innerHTML = (++blurCount + ' blurs');
};