获取触发 jquery blur() 事件的点击对象

IT技术 javascript jquery events jquery-events onblur
2021-03-01 09:43:38

假设我这样做:

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

有没有办法获取被点击的对象以触发模糊动作?

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

4个回答

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

$(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);
})
我发现setTimeout需要一个明确的延迟来允许另一个click事件触发;也对我来说(jQuery 1.8)document.activeElementbody,这不是很有帮助:)
2021-04-30 09:43:38
我应该补充说,可能有更好的方法来做到这一点,沿着相同的路线,通过使用setImmediaterequestAnimationFrame
2021-05-08 09:43:38

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

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

});

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

您正在处理一个blur事件,而不是一个click事件。因此,在您的事件中,您将拥有您blur编辑的元素如果你想要clicked 元素,你需要另一个事件来获得它。

blur可以由其他事件触发,例如聚焦某物;不只是点击某些东西。因此,无法获取“导致模糊”的元素。

没有办法,这不是真的。参考这个答案:stackoverflow.com/a/11544589/1450294
2021-05-13 09:43:38
这在 Flash/AS3 中很容易实现,使用 FocusIn 和 FocusOut 事件,其中包括接收和失去焦点的对象,并具有简单的取消能力。很高兴看到 2018 年,JavaScript/HTML 现在比 Flash 落后十多年,而且没有简单的方法可以做到这一点。我讨厌发表这样的评论,但是随着我年复一年地看到 JS 仍然可怕和缺乏,AS3 语言相对于 JS 的绝对优势变得越来越令人恼火。
2021-05-14 09:43:38

blur处理程序函数中使用 this将为您提供blured元素。

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

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

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

并且要获得焦点元素,您可以使用:focus选择器,例如:$(':focus')将返回文档中的焦点元素。

我发现,我需要把$someElement.is(':focus')$(':focus')一个范围内setTimeout的功能,通过模糊处理程序触发,给一些浏览器有机会专注于下一个元素。
2021-05-19 09:43:38