con referencia:
document.activeElement
Desafortunadamente el nuevo elemento no está enfocado como sucede el evento falta de definición, por lo que este informará cuerpo. Así que tendrás que hackearlo con flags y focus event, o usar setTimeout.
$("input").blur(function() {
setTimeout(function() {
console.log(document.activeElement);
}, 1);
});
Funciona bien.
Sin setTimeout, puede utilizar esto:
http://jsfiddle.net/RKtdm/
(function() {
var blurred = false,
testIs = $([document.body, document, document.documentElement]);
//Don't customize this, especially "focusIN" should NOT be changed to "focus"
$(document).on("focusin", function() {
if (blurred) {
var elem = document.activeElement;
blurred = false;
if (!$(elem).is(testIs)) {
doSomethingWith(elem); //If we reached here, then we have what you need.
}
}
});
//This is customizable to an extent, set your selectors up here and set blurred = true in the function
$("input").blur(function() {
blurred = true;
});
})();
//Your custom handler
function doSomethingWith(elem) {
console.log(elem);
}
Eso es lo que temía. Aceptaré esta respuesta en un par de días, si no hay una solución que no sea setTimeout. – fadedbee
@chrisdew Puedo hacer algo con el evento de enfoque, pero creo que va a ser más complicado que un simple tiempo de espera. – Esailija
@chrisdew ¿esto funciona para usted? http://jsfiddle.net/RKtdm/ – Esailija