2016-11-25 49 views
1

我正在嘗試處理動態創建的元素的點擊事件(因此無法使用.click jQuery調用),但同時我不想默認行動發生。基本上我想顯示我的自定義用戶界面,而不是默認的用戶界面。動態元素:如何防止其他jquery處理程序運行

jQuery(document).on('click', selector, function(e) { 
    console.log('I got the event, let me try to stop other handlers ..'); 

    // none of these work 
    e.preventDefault(); 
    e.stopImmediatePropagation(); 
    e.stopPropagation(); 

    // want show my UI here ... 

    return false; 
}); 

也試過mousedown事件。

但它不起作用,默認UI仍顯示出來。

注:我不控制默認處理程序,不能改變這一點。

+0

讓我們試着做出更長遠的解決方案。你如何生成動態元素? 012fa Afaik,當你調用document.createElement時,它返回一個DOM節點,你可以包裝jQuery函數。請回復,以便我可以嘗試回答這個問題。 – Jekk

+0

@Jekk元素本身是在WordPress內核中生成的,深入一些Backbone.js內部,我相信。基本不知道。 – srvy

回答

0

可以使用off請從選擇的單擊事件:

在這裏你去工作片斷:

$("#test").html('<button class="click">Click me to fire event</button><button class="clicktocancel">Click me to remove event</button>'); 
 

 
$("#test").on("click", ".click", function() { 
 
    console.log("clicked") 
 
}) 
 

 
$("#test").on("click", ".clicktocancel", function() { 
 
    console.log("click cancelled") 
 
    $("#test").off("click", ".click") 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="test"> 
 
</div>

+0

似乎沒有幫助我的情況。我添加了這個,並把一個控制檯日誌裏面的處理程序,但沒有顯示出來.. jQuery(document).off('mousedown','.dashicons-edit',function(e){關閉mousedown handlers ...'); }); – srvy

+0

@srvy:我用一個工作片段更新了我的答案,看看你確定完成了同樣的工作 –

0

問題是,事件中首先執行先得基礎。這意味着如果其他click事件綁定在您的事件之前,那麼它首先在鏈中執行。要解決此問題,您可以使用off()刪除綁定到該元素的所有單擊事件,然後添加事件處理程序。

所以寫這行代碼的腳本之前

jQuery(document).off('click', selector); 

注:off()僅刪除使用on()

0

注意連接的事件:以下主要適用於jQuery的事件處理程序。通常不可能操縱未跟蹤的事件處理程序分配,例如通過.addEventListener()添加的事件處理程序分配。

您需要確保您的事件處理程序是jQuery將事件傳遞給的第一個事件處理程序。 jQuery不支持這種操作,所以需要一些黑客行爲。

This answer和它的意見之一指出,如何訪問與元素相關的jQuery的事件處理程序的列表:

$._data($('#someElementId')[0]).events 

這個,你可以安排你的處理器是第一位的。

This answer展示瞭如何防止這種情況的處理程序後,處理器從執行:

$('#someElementId').on('click', function(event){ 
    // do not pass this event to further jQuery event handlers 
    event.stopImmediatePropagation(); 
    // ... 
}); 

總之,這些技術可用於確保您的事件處理程序觸發,然後再利用,爲防止進一步的處理程序從觸發同事件。

相關問題