簡體   English   中英

從onclick處理程序停止事件傳播

[英]Stopping event propagation from an onclick handler

我正在研究一個遺留的Web應用程序,我逐步調整並發現需要從內聯的onclick處理程序停止事件傳播。

以此為例:

<a id="inner" onclick="return handleOnclick();" href="#">Some link</a>

除了onclick處理程序之外,還有添加了addEventListener偵聽器。 我需要在某些條件下onclick處理程序可以停止事件的傳播。 我已經嘗試過event.stopPropagation()但它似乎沒有用。 這是一個測試的jsfiddle:

http://jsfiddle.net/APQk6/985/

有任何想法嗎?

根據Felix Kling的評論找到了解決方案:

  • 需要調用event.stopImmediatePropagation()而不是event.stopPropagation()
  • 需要從內聯處理程序傳遞實際的事件對象( 這個問題也很有用)

這是一個有效的解決方案:

http://jsfiddle.net/r95cC/3/

您可以使用“已取消”屬性。 不好,但有效。 http://jsfiddle.net/koldev/45zbA/

HTML

<script>
function handleOnclick(self) {
    self.setAttribute("cancelled", confirm('Stop event?') ? "1" : "0");
    return false;
}
</script>

<div>
    <a id="inner" onclick="return handleOnclick(this);" href="#">Some link</a>
</div>

JavaScript的

document.getElementById('inner').addEventListener('click', function(e){
    if (this.getAttribute("cancelled") == "1") {
        return;
    }
    alert("Listener called");
});

暫無
暫無

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

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