事件传播从子元素发生到父元素。
它可能看起来像你的第一行是处理点击子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);
// remove old child if needed and add new child divs
newChildDiv.on('click', handleChildDiv);
}
function handleChildDiv(e){
//do something
e.stopPropagation();
}
$('#addCompaniesModal').click(function(){
});
第二种方法是使用$(document).on('click', ...
方法既孩子和家长的div像这样:
$(document).on('click','#addCompany_map', function (e) {
e.stopPropagation();
});
$(document).on('click','#addCompaniesModal', function(){
});
我已根据您的一些评论对我的答案进行了更新,因此请检查一下。 –