2017-09-12 213 views
0

我有div結構。取消父元素的點擊事件

<div id="parentDiv"> 
    Employee Data 
    <a>Click Here</a> 
</div> 

父div的點擊事件全部準備好由第三方插件註冊,它不受我控制。它在那個div點擊做一些驗證。

我想對點擊錨點標籤'Click Here'執行一些操作,但不想執行驗證,註冊div點擊。

但是,當用戶點擊「員工數據」時,它應該執行驗證,並註冊點擊事件。

我試圖

<a onclick="(arguments[0]||window.event).stopPropagation();">Click Here</a> 
<a onclick="(arguments[0]||window.event).cancelBubble=true;"></a> 

但它取消了自己的點擊事件即錨標記點擊事件。

+0

如果你只是沒」噸使用內聯聽衆,這將是很容易... – Teemu

+0

你試過了嗎:'Click Here '? –

+1

@AndreiCACIO他們爲什麼要這樣做?它根本無法工作。 – Teemu

回答

1

stopPropagation()正是你所需要的,但是你需要直接在引發的click事件上調用它。你可以做到這一點使用jQuery,像這樣:

$('#parentDiv').click(function() { 
 
    console.log('parent clicked'); 
 
}) 
 

 
$('#parentDiv a').click(function(e) { 
 
    e.stopPropagation(); 
 
    console.log('child clicked'); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="parentDiv"> 
 
    Employee Data 
 
    <a href="#">Click Here</a> 
 
</div>

或者,您可以使用本機JS是這樣的:

document.querySelector('#parentDiv').addEventListener('click', function() { 
 
    console.log('parent clicked'); 
 
}) 
 

 
document.querySelector('#parentDiv a').addEventListener('click', function(e) { 
 
    e.stopPropagation(); 
 
    console.log('child clicked'); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="parentDiv"> 
 
    Employee Data 
 
    <a href="#">Click Here</a> 
 
</div>

+0

我都準備好嘗試添加div和anchor的click事件。但是有一個方法'validateData'綁定了div的click事件。並且該方法在錨點標記點擊事件之前被調用 –

+0

假設您的意思是它被添加到'onclick'屬性 - 刪除它。無論如何你都不應該使用這些。從示例中發佈的JS中的相關事件處理函數中調用該函數。 –

+0

頁面其他區域的div結構相同。我想繼續爲他們默認行爲 –

相關問題