![](/img/trans.png)
[英]How to bind a click event to the document so that it fires only when no object is clicked
[英]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.