2013-03-26 48 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