事件传播是从子元素到父元素的。
可能看起来你的第一行代码处理的是子div的点击事件,但是你指定的方式实际上是处理文档级别(因为你的选择器是$(document)
),只有当它发生在子div上时才调用该方法(on('click','#addCompany_map'
部分)。由于文档是addCompaniesModal
div的父元素,所以它的点击处理程序将在addCompaniesModal
div中使用的处理程序之后触发。
为了使其工作,你需要将代码更改为:
$('#addCompany_map').click(function (e) {
e.stopPropagation();
});
$('#addCompaniesModal').click(function(){
});
编辑:
我看到你在一些评论中提到,你使用 $(document).on('click', ...
的主要原因是因为你正在动态添加子div。
在这种情况下,有两种可行的方法来处理你的问题。
第一种方法是你也动态添加子div处理程序,并在删除时取消绑定。你可以使用以下方法:
function dynamicallyAddChildren(){
var oldChildDiv = $('#addCompany_map');
if (oldChildDiv.length > 0)
oldChildDiv.off('click', handleChildDiv);
newChildDiv.on('click', handleChildDiv);
}
function handleChildDiv(e){
e.stopPropagation();
}
$('#addCompaniesModal').click(function(){
});
第二种方法是使用$(document).on('click', ...
这种方法,并同时使用子div和父div,像这样:
$(document).on('click','#addCompany_map', function (e) {
e.stopPropagation();
});
$(document).on('click','#addCompaniesModal', function(){
});