2012-07-21 17 views

Respuesta

19

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); 
} 
+0

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

+0

@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

+0

@chrisdew ¿esto funciona para usted? http://jsfiddle.net/RKtdm/ – Esailija

Cuestiones relacionadas