2013-03-26 52 views
2

我在jquery上模糊和onblur事件的陌生人问题上陷入困境。当你输入模糊,然后onblur事件执行第一个和.blur方法。但是,当您通过在锚标签上拼凑来调用触发器.blur时,则.blur方法首先执行然后执行onblur事件。为什么这个区别和解决方案为此。 Demoonblur事件模糊后执行

<head> 
    <script type="text/javascript" src="jquery-1.8.3.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $('a').click(function() { 
       $('input').blur(); 
      }) 
     }) 

     function test() { 
      alert(0); 
     } 
     $(function() { 
      $('input').blur(function() { 
       alert(1); 
      }) 
     }) 
    </script> 
</head> 
<body> 
    <input type="text" onblur="test()" /> 
    <a href="#">blur input</a> 
</body> 

回答

0

注:做$('input').blur()没有太大的意义,因为只有一次一个项目具有焦点(如果有的话)。使用该语法之后发生的任何事情都是由于jQuery(它触发注册的处理程序,并尝试执行(在此示例中)bluronblur属性作为函数)。另一方面,在常规DOM节点上调用blur()(如(模糊处理程序不会触发)

我不完全理解,你为什么试图做到这一点,但如果你坚持它和你想要的,基本上,确保你的模糊处理器在onblur属性中定义的那个之前触发,你可以使用双重方法(使用jQuery.on和常规处理程序寄存器) 这样,处理器第一或第二处理器将在之前触发分配在的一个贡。

基本例子在这里http://jsfiddle.net/W3BDW/5/

它需要一些调整,特别是如果你关心它可能会触发多次(在这种情况下动态地忙里忙外的处理程序,或存储信息的地方,该事件已处理)。

0

我不认为它发生这样当你的问题那么jQuery的blur提到onblur event execute after blur

您当前的代码火灾直列onblur第一。

您的代码正常工作,但这是一个更好的代码,其中一个doc ready和一个功能测试在其外部。

function test() { 
    alert(0); 
} 
$(function() { 
    $('a').click(function() { 
     $('input').blur(); 
    }); 

    $('input').blur(function() { 
     alert(1); 
    }); 
}); 
+0

我不了解你,但我总是先得到0,然后是1(Chrome)。 – WTK 2013-03-26 09:28:04

+0

这就是我所说的。 – Jai 2013-03-26 09:30:56

+0

“这样我总是先得到0,然后1” - 是的,你先得到0,然后是1,即使代码OP张贴,所以我没有看到这句话的一个点。 – WTK 2013-03-26 09:32:02