2011-06-23 34 views
7

如何在onblur事件之前先觸發onclick事件,如果我目前專注於jQuery中的文本框?jQuery:如何在onblur之前先觸發onclick?

預期輸出:在texbox中的blur事件之前首先觸發按鈕單擊事件。警報 「mybtn的onclick警報」

演示:http://jsfiddle.net/Zk8Fg/

代碼:

<input type="text" name="fname" id="fname" value="" /><br /> 
<input type="button" name="mybtn" id="mybtn" value="Click Me" /> 

<script language="javascript"> 
$(document).ready(function() { 
    myFunc(); 
}); 

function myFunc() { 
    $('#fname').focus().blur(function() { 
     alert('fname onblur alert'); 
    }); 

    $('#mybtn').click(function() { 
     alert('mybtn onclick alert'); 
    }); 
} 
</script> 

謝謝:)

+0

你想用'$ .focus()。blur()'做什麼? – Sampson

+1

我可以問你爲什麼和/或你想做什麼?也許有人能夠提出一些替代方案?用戶界面事件發生是一定的順序,我不認爲它可以改變。 –

+0

@Jonathan:我對當前集中在文本框中的模糊事件進行了驗證,但模糊場景是我單擊了該按鈕,然後模糊事件首先觸發的是單擊事件。 – marknt15

回答

3

如果輸入領域目前集中,你不能專注於其他元素沒有首先模糊你目前的焦點。無論你試圖做什麼,可能有更好的方法。

活動的可見記錄:http://jsfiddle.net/Zk8Fg/3/

+0

所以這是不可能的?也許有一個解決方法呢?謝謝 – marknt15

+3

@ marknt15不可能偏離標準事件序列,但這並不意味着你不可能實現你想要做的事情。讓我們知道你想完成什麼,我們會盡力幫助。 – Sampson

6

那麼它可能是標準的一部分,該事件觸發第一次,所以你可能不應該被改變的順序。你可以做的事情是推遲使用window.setTimeout短暫延遲的結果行動。

$('#fname').focus().blur(function() { 
    window.setTimeout(function(){alert('fname onblur alert')},0.1); 
}); 

我與其他意見一致,雖然,它真的看起來像你應該反思一下,你將如何這一點,因爲重排違約事件給我的印象,可能有更多的優雅的解決方案跛腳的黑客。

+0

謝謝@SpliFF。這是最好的答案。 :) –