javascript - unfocus - trigger blur event jquery
Obtener el objeto cliqueado que activó jquery blur() evento (4)
Dentro de un controlador de eventos, this
será el elemento al que está vinculado el evento, y e.target
será el elemento que desencadenó el evento (puede o no ser el mismo que this
).
Está entregando un evento de blur
, no un evento de click
. Entonces, dentro de tu evento, tendrás el elemento que blur
. Si desea el elemento click
ed, necesitaría otro evento para obtenerlo.
blur
puede ser desencadenado por otros eventos, como enfocar algo; no solo haciendo clic en algo. Entonces, no hay forma de obtener el elemento que "causó el desenfoque".
Esta pregunta ya tiene una respuesta aquí:
Supongamos que hago esto:
$(target).blur(function(e){
//do stuff
});
¿Hay alguna manera de recuperar el objeto que se hizo clic para activar la acción de desenfoque?
Intenté usar e.target
, pero parece que devuelve el objeto adjunto a la acción de desenfoque en lugar del objeto cliqueado.
El truco es esperar un tic:
$(el).blur(function (event) {
// If we just hangout an extra tick, we''ll find out which element got focus really
setTimeout(function(){
document.activeElement; // This is the element that has focus
},1);
})
Si entiendo tu pregunta correctamente, esto debería hacerlo:
$(function() {
var clicky;
$(document).mousedown(function(e) {
// The latest element clicked
clicky = $(e.target);
});
// when ''clicky == null'' on blur, we know it was not caused by a click
// but maybe by pressing the tab key
$(document).mouseup(function(e) {
clicky = null;
});
$(target).blur(function(e) {
console.log(clicky);
});
});
Usar esto dentro de la función del controlador de blur
le dará el elemento blured
.
$(target).blur(function(e){
var bluredElement = this; // dom element
// To make a jQuery object
var bluredElement = $(this);
});
Dentro del evento de blur
no puede captar el elemento cliqueado. Para obtener el elemento click
ed, necesita click
evento. Por ejemplo:
$(element).click(function() {
var clickedElement = this;
});
Y para obtener el elemento enfocado, puede usar :focus
selector de :focus
como: $('':focus'')
le devolverá el elemento enfocado en el documento.