2009-09-07 227 views
0

我們有一個使用OnBlur和OnMouseDown事件組合的Web系統。不幸的是,出於一個奇怪的原因,OnMouseDown事件處理程序在調用OnBlur事件處理程序之前被觸發。在HTML事件中設置優先級

這不是我們想要的。相反,我們希望在調用onMouseDown事件處理程序之前始終調用OnBlur事件處理程序。有沒有辦法這樣做,也許給onBlur更高的優先級?

此前,我們沒有使用onMouseDown事件處理函數,而是使用了onclick事件。但是,由於JavaScript的單線程特性,這帶來了一些問題。

+0

這取決於瀏覽器。 – voyager 2009-09-07 14:07:22

+0

絕對是。在多個瀏覽器上編寫代碼總是很困難。但是,我們可以安全地做出我們針對IE的假設。 還有一個奇怪的是,當我用onclick事件替換onmousedown時,會發生什麼情況是隻調用了onblur事件處理函數,這很好,但是實際的onclick處理函數在我用字段onblur事件集。 隨着onmousedown我們幾乎在那裏,但onblur事件是在onmousedown後觸發,這不是我們想要的。 – user164701 2009-09-07 14:49:03

+0

我認爲mousedown然後模糊在這種情況下是非常標準的。記住onmousedown事件處理程序可能會返回false,在這種情況下焦點更改不會發生。 onclick通常應該工作;也許發佈的代碼不在那裏工作? – bobince 2009-09-07 23:27:05

回答

0

捕獲event #2,火event #1。然後讓event #2通過。

..捕獲和釋放模式:)

+0

非常感謝。你能否提供一個簡單的例子或指針來獲取更多信息? – user164701 2009-09-07 14:26:28

+0

@roosteronacid,如果只發生其中一個事件會怎樣?你仍然稱身體方法? – PanCrit 2009-09-07 15:34:14

0

你會使用狀態變量有捏造事實。這有點骯髒,但它的作用:doImportantStuff的肉只會運行一次。

var importantStuffDone = false; 
function doImportantStuff(){ 
    if(!importantStuffDone){ 
      // Do something important 
      importantStuffDone = true; 
    } 
} 

function doOnBlur(){ 
    // This function gets bound to the blur event 
    doImportantStuff(); 
    // Do other blur stuff 
} 
function doOnMouseDown(){ 
    // This function gets bound to the mousedown event 
    doImportantStuff(); 
    // Do other mousedown stuff 
} 
+0

非常感謝。我得到了你的解決方案,但我們想要的是在調用onmousedown事件之前總是調用onBlur事件。所以問題的要點是更改JavaScript事件處理優先級或優先級。 – user164701 2009-09-07 14:29:26

+0

你不能;即使可以,傳統瀏覽器對事件系統的實現也是如此的不同以至於它最終會打破別的東西。你能做的最好的是假的,就像這樣。 – 2009-09-07 14:40:53