2015-12-08 39 views
0

我正在使用〜10年前編寫的遺留HTML頁面。話雖如此,應該明確知道,重構舊代碼不僅不是時間有效的,而且是一項冒險的努力。HTML onClick VS jQuery mousedown計時

傳統網頁有許多按鈕,它們使用onClick =「myFunction()」標籤激活JavaScript事件。我的任務是將JavaScript文件(使用jQuery)連接到這些傳統網頁。我已經添加有問題的JavaScript文件和jQuery 1.9.1源,並將其連接到傳統的HTML頁面之前結束標記,例如:

<script src="jquery-1.9.1.min.js"></script> 

這個JavaScript源文件(使用jQuery的)激活在與連接類「getStats」按鈕鼠標按下事件,例如:

$(document).on('mousedown', '.getStats', function (event) { 
    //Stuff 
}); 

但是,當jQuery的激活,它不執行的按鈕應該通過HTML onClick事件做重定向。

我找不到任何關於HTML onClick和jQuery mousedown事件定時發生的信息,以瞭解我是否遇到競爭條件。 HTML onClick重定向和jQuery mousedown事件都需要發生,我不能簡單地回過頭來編輯所有遺留的HTML onClick事件,以便在jQuery中完成,因爲這需要幾個月的工作。

樣品的jsfiddle: https://jsfiddle.net/koa2hsbp/

jQuery的工作馬上蝙蝠。如果你註釋掉jQuery mousedown函數,那麼HTML onClick就可以工作。但是我必須在兩部分都激活的情況下(最好是在onClick之前使用jQuery mousedown),而不改變HTML的功能。 (同樣,更改遺留代碼本身也是一項昂貴的努力。)

+0

在您的示例中,事件傳播良好。這是'alert()'中斷傳播到點擊處理程序。編輯:觀看您的控制檯:https://jsfiddle.net/koa2hsbp/1/ – Antiga

+0

@Antiga幾乎是正確的 - 警報做的伎倆,但它不是關於停止傳播 - 單擊事件根本不會觸發,因爲它從來沒有發生過警報。 – Dmitry

回答

0

有關事件的一些說明:
mousedown - 鼠標按鈕在聚焦元素按下時立即觸發。
mouseup - 在鼠標按鈕上升後立即觸發聚焦元素
點擊 - 在連續mousedown +鼠標在同一元素上時觸發。

因此,在您的示例中 - 您將鼠標按下並立即觸發產生警報的代碼。然後你釋放鼠標按鈕,但網頁是專注於警報,而不是我們的元素作爲警報窗口本質阻止其他一切,並中斷JavaScript。由於沒有mouseup事件 - 也沒有點擊事件,因此不會調用遺留代碼。

請嘗試以下證明我是正確的 - 將鼠標按下並按住它。然後點擊輸入按鈕 - 這將刪除警報。然後在元素頂部釋放鼠標按鈕。這將觸發點擊。

不幸的是,在同一個例子中很難混用mousedown點擊和提醒。考慮移動jQuery處理程序來點擊,如果你需要警報。原因的那些將在遺留處理程序之後調用jQuery。