ciekawe pytanie. Najważniejsze w tej sprawie jest - kiedy ma miejsce zdarzenie "fokus", przed lub po zdarzeniu? Jeśli uruchomi się przed zdarzeniem, problem jest prosty, ponieważ możesz zapisać bieżący fokus w zmiennej, do której zdarzenie blur może uzyskać dostęp.
Jednak, przynajmniej w przeglądarce Chrome 13, zdarzenie blur pojawia się przed zdarzenia fokusa. Jedno możliwe rozwiązanie.
Biorąc pod uwagę następujące HTML:
<input id="foo" value='foo' />
<input id="bar" value='bar' />
Następnie można:
var currentFocus;
var pendingBlur;
var foo = document.getElementById('foo');
foo.addEventListener('focus', function(){
currentFocus = foo;
if(pendingBlur !== undefined){
pendingBlur();
pendingBlur = undefined;
}
});
foo.addEventListener('blur', function(){
pendingBlur = function(){
console.log('new focus:', currentFocus);
};
});
var bar= document.getElementById('bar');
bar.addEventListener('focus', function(){
currentFocus = bar;
if(pendingBlur !== undefined){
pendingBlur();
pendingBlur = undefined;
}
});
bar.addEventListener('blur', function(){
pendingBlur = function(){
console.log('new focus:', currentFocus);
};
});
Zasadniczo, po prostu nie jest zwrotna rozmycie więc jest przydatny dla zdarzenia ostrości zadzwonić po wiemy o których element był skupiony.
Oto working example na JSFiddle.
EDIT: To rozwiązanie cierpi na problem, że jeśli plama na formularzu, klikając na coś inne niż innego elementu formularza, zdarzenie plama nie odpala (ponieważ czekamy na imprezy focus). Jedynym sposobem, który mogę sobie wyobrazić, jest użycie licznika czasu, aby sprawdzić, czy jest zdefiniowany element oczekującyBlur, a jeśli tak, to zadzwoń. W tym momencie naprawdę nie potrzebujesz zdarzenia fokusowania, aby wywołać zwrotne wywołanie rozmycia ...
Jest to możliwe do wykonania w jQuery, co oznacza, że jest to możliwe w JavaScript. Nie mam jednak pojęcia, dobre pytanie. +1 –
Hmmm. Czy możesz umieścić jQuery w odpowiedzi i czy mogę od niej odejść? –
możliwy duplikat [Kiedy pojawia się onblur, jak mogę się dowiedzieć, który element fokusu przeszedł na *?] (Http://stackoverflow.com/questions/121499/when-onblur-occurs-how-can-i-find- out-który-element-focus-went-to) –