簡體   English   中英

你可以綁定.click(),以便它在onclick之前觸發嗎?

[英]can you bind .click() so that it fires prior to onclick?

我正在為一個用JSF構建的應用程序編寫jQuery。 JSF組件使用了很多自己的JS來執行JSF所做的任何事情,並且他們使用大量的onclick屬性來處理它們。

是否有有效/正確的方法將您自己的click事件綁定到元素並確保您的事件在默認的onclick事件之前觸發? 看來默認情況下,在任何內聯onclick函數調用之后會觸發jQuery單擊函數。

在jQuery中,事件嚴格按照它們的注冊順序觸發。

您可以通過迭代整個DOM,刪除那些onclick屬性,然后注冊自己的處理程序然后調用最初定義的函數來規避任何內聯DOM0 onclick樣式處理程序。

就像是:

$('[onclick]').each(function() {
    var handler = $(this).prop('onclick');
    $(this).removeProp('onclick');
    $(this).click(handler);
});

http://jsfiddle.net/alnitak/2SCTK/

因此,首先使用jQuery注冊您自己的處理程序,然后調用上面的代碼刪除原始的內聯onclick處理程序並重新注冊它們,就像jQuery添加它們一樣。

EDIT代碼簡化為僅使用原始函數--jQuery將確保使用正確的上下文調用該函數。 顯式將上下文設置為window先前代碼不正確。

您可以從DOM元素中刪除onClick事件,然后使用jQuery重新綁定它。

<div id="click" onclick="alert('DOM')">CLICK ME</div>

$('#click').click(function(){
    alert('jQuery');
});

var clickFunc = $('#click').prop('onclick');
$('#click').removeProp('onclick');
$('#click').click(clickFunc);

事件按它們綁定的順序調用,因此首先調用函數的唯一方法是取消綁定,然后重新綁定原始函數。

演示: http//jsfiddle.net/wYd5t/2/

無法在同一元素上為同一個偵聽器強制執行事件觸發順序。 每個瀏覽器都可以按照它選擇的任何順序自由觸發事件。

你可以在元素上使用onmousedown

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM