2012-07-18 62 views
32

假如我这样做:获取点击的对象触发jQuery的模糊()事件

$(target).blur(function(e){ 
    //do stuff 
}); 

有没有一种方法来获取被点击,以触发模糊动作的对象?

我试过使用e.target,但是这似乎是返回附加到模糊操作而不是点击对象的对象。

+2

为什么被标记为重复这个问题?我还没有发现关于jQuery模糊事件的另一个问题。如果它真的是一个骗局,请链接到重复的问题。 – 2015-04-01 01:14:33

+0

有没有人找到一种方法让非Chromium浏览器在这种情况下工作?就我所知,无法处理该字段之外的选项卡以获取新的焦点元素。 'var target = e.toElement || e.relatedTarget;'没有任何回报。蹩脚的规格作家的蹩脚规格... – user2173353 2015-11-23 09:22:00

回答

29

如果我正确理解你的问题,这应该这样做:

$(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); 
    });​​ 

}); 
+6

这仅适用于用户*在其他元素上单击*的情况。如果用户选中了它,或者通过其他方法接收了焦点,则它不起作用。 – 2015-04-01 01:15:28

1

blur处理函数中使用此函数会给你blured元素。

$(target).blur(function(e){ 
    var bluredElement = this; // dom element 
    // To make a jQuery object 
    var bluredElement = $(this); 
}); 

blur事件中,您无法捕获单击的元素。要获得click ed元素,您需要click事件。例如:

$(element).click(function() { 
    var clickedElement = this; 
}); 

而得到聚焦元素可以使用:focus选择,如:$(':focus')会回报你的文件的重点元素。

+0

我发现我需要在模糊触发的'setTimeout'函数内放置'$ someElement.is(':focus')'或'$(':focus')''处理程序,让一些浏览器有机会专注于下一个元素。 – 2015-04-01 02:25:34

9

在事件处理程序中,this将是事件绑定的元素,并且e.target将是触发事件的元素(可能与this相同或不同)。

您正在处理blur事件,而不是click事件。所以,在你的活动中,你将拥有你编辑的元素。如果你想要click ed元素,你需要另一个事件来获取它。

blur可以被其他事件触发,例如聚焦某物;不只是点击某个东西。因此,没有办法获得“造成模糊”的元素。

+0

不是没有办法。参考这个答案:http://stackoverflow.com/a/11544589/1450294 – 2015-04-01 02:27:03

38

诀窍是要等待一个额外的滴答声:

$(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); 
}) 
+1

我发现'setTimeout'需要明确的延迟,以允许其他'click'事件触发;也为我(jQuery 1.8)'document.activeElement'是'身体',这是不是很有用:) – drzaus 2013-03-10 06:16:29

+0

这工作得很好在铬30和Firefox 19. – 2013-11-08 12:55:33

+0

这样做在IE9 +和其他好的浏览器? – chovy 2014-05-06 21:01:11