我有一个名为appendDiv
的div,当我点击它时,会附加一个类名为textGroup
的div。
$("#appendDiv").on("click", function(e) {
$('#appendDiv').append("<label class='textGroup' style='width:50px;height:50px;background-color:gray;z-index:4;position:absolute;top:" + e.pageY + "px;left:" + e.pageX + "px;'></label>")
});
我点击textGroup
div的点击功能(即),点击它时会发出警报。但是当我单击textGroup
div时,警报即将到来,并附加一个div。这是函数
$("#appendDiv").on("click", function(e) {
$('#appendDiv').append("<label class='textGroup' style='width:50px;height:50px;background-color:gray;z-index:4;position:absolute;top:" + e.pageY + "px;left:" + e.pageX + "px;'></label>")
$(".textGroup").bind("click", function() {
alert("appended");
});
});
我知道textGroup
是appendDiv
的孩子。但是,我的问题是
我点击了textGroup
div,但为什么会执行appendDiv
的点击功能?
如何仅在点击appendDiv
时限制appendDiv
的点击功能,而不是点击textGroup
?
答案 0 :(得分:1)
您的代码中有2个问题
1)元素上的多事件绑定。
2)事件传播到子点击元素
修改单击处理程序以将事件附加到上一个附加元素以及从父元素停止事件传播:
$("#appendDiv .textGroup:last").click( function(e) {
e.stopPropagation();
alert("hi")
});
<强> Working Demo 强>
答案 1 :(得分:0)
您可以执行以下2项更改:
$("#appendDiv").on("click", function(e) {
$('#appendDiv').append("<label class='textGroup' style='width:50px;height:50px;background-color:gray;z-index:4;position:absolute;top:" + e.pageY + "px;left:" + e.pageX + "px;'></label>")
// remove .textGroup click event from here
});
为textGroup创建新事件
$(document).on("click",".textGroup", function() {
alert("appended");
});
答案 2 :(得分:0)
事件通常会冒出DOM树(标签位于#appenDiv内部,因此是“父”,也会获得点击事件)。要停止使用:
$(".textGroup").on("click", function(event){
event.stopPropagation();
alert("hi");
});
答案 3 :(得分:0)
试试这个:
使用带链接的on()更好的方法,
$("#appendDiv").on('click',function(e){
$('#appendDiv').append("<label class='textGroup' style='width:50px;height:50px;background-color:gray;z-index:4;position:absolute;top:" + e.pageY + "px;left:" + e.pageX + "px;'></label>")
}).on('click','.textGroup',function(e) {
e.stopPropagation();
alert("appended");
});
答案 4 :(得分:0)
这种情况是由于事件冒泡导致父事件在child和then child事件触发之前触发。 您可以将 event.stopPropagation()与子事件一起使用。将解决您的问题。