2

I stuck on stranger issue on blur and onblur event on jquery. When you blur on input then onblur event execute first and .blur method. But when you call trigger .blur by clicling on anchor tag then .blur method execute first then onblur event. why this difference and any solution for this.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>
4

2 回答 2

0

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

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

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

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

于 2013-03-26T09:24:58.137 回答
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);
   });
});
于 2013-03-26T09:26:47.697 回答