onblur事件在模糊后执行

时间:2013-03-26 09:18:00

标签: javascript jquery

我坚持关于jquery上的模糊和onblur事件的陌生问题。当您在输入上模糊时,onblur事件先执行,然后执行.blur方法。但是当您通过在锚标记上进行clicling调用触发器.blur时,然后.blur方法首先执行onblur事件。为什么会出现这种差异以及任何解决方案。Demo

<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>

2 个答案:

答案 0 :(得分:0)

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

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

这里的基本示例http://jsfiddle.net/W3BDW/5/

它需要一些调整,特别是如果你担心它可能会多次触发(在这种情况下动态地处理处理程序,或者在某处存储信息,该事件已经被处理过)。

答案 1 :(得分:0)

我不认为它会像你在问题中提到的那样发生 onblur event execute after blur

您当前的代码首先触发内联onblur,然后触发jQuery的blur

您的代码按预期工作,但这是一个更好的代码,只有一个doc ready和一个功能测试。

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

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