2016-04-26 137 views
0

我有2個div與js單擊事件。一個div位於另一個div中。如何防止單擊內部div點擊事件從外部div

但我不想要外部div的點擊事件被觸發,如果我點擊內部的一個。我怎樣才能防止呢?

+0

[父事件處理程序的執行預防(可能的重複http://stackoverflow.com/questions/139858 2 /阻止執行父事件處理程序) –

回答

0

使用event.stopPropagation();

像這樣

document.getElementById("#seconddiv").addEventListener("click", function($event){ 
    $event.stopPropagation(); 
}); 
+0

THX :)但經過一些研究,我發現了一個更好的方式來直接調用內部div的點擊事件,而不觸發外部的一個。它看起來像$('。class1').add('。class2')。click(some_function);'現在問題是我需要調用文檔上的click事件,因爲我的div不存在,如果我的js代碼被讀取。 '(document).on('click',「.class2」,function(e){});'我怎樣才能調用'$('。class1').add('.class2')。click(some_function );'在文件上? – dunnohowishouldnamemyself

+0

對你有好處:) –

0

使用event.stopPropagation:

document.getElementById('inner').addEventListener('click', function (event){ 
    event.stopPropagation(); 
    console.log ('Inner div clicked!'); 
}); 

https://jsfiddle.net/4L87qLte/

0

默認情況下,事件處理的DOM的最低級別開始,您已經定義了處理程序處理目標事件。假設您已經在父鏈中定義了更高級的事件偵聽器來處理同一個事件,如果您不希望事件在您打算處理的層之外處理,則需要stop the propagation of the event

e.stopPropagation(); 

見時刪除在下面的例子中該行發生了什麼:

document.querySelector('.inner').addEventListener('click', function(e) { 
 
    alert('inner div clicked!'); 
 
    e.stopPropagation(); 
 
}); 
 

 
document.querySelector('.outer').addEventListener('click', function() { 
 
    alert('outer div clicked!'); 
 
});
.outer { 
 
    width: 200px; 
 
    height: 200px; 
 
    background: blue; 
 
} 
 

 
.inner { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: green; 
 
}
<div class='outer'> 
 
    Outer 
 
    <div class='inner'> 
 
    Inner 
 
    </div> 
 
</div>

相關問題