【发布时间】:2019-05-15 09:49:18
【问题描述】:
我做了一个点击 div。通过单击前两次潜水,我得到警报(this.id) - some_id1 或 some_id2,这很好。 单击 Add Div 按钮会创建一个新的 div some_id3,但单击新的 div 不会显示警报 (this.id),它不会注册。我不知道为什么。有什么想法吗?
<style>
#some_id1{
width: 50px;
height: 50px;
margin: 10px;
float: left;
background-color: red;
}
#some_id2{
width: 50px;
height: 50px;
margin: 10px;
float: left;
background-color: red;
}
#some_id3{
width: 50px;
height: 50px;
margin: 10px;
float: left;
background-color: red;
}
#parent{
width: 350px;
height: 150px;
margin: 10px;
padding: 10px;
background-color: blue;
}
#parent2{
width: 150px;
height: 150px;
margin: 10px;
padding: 10px;
background-color: blue;
}
</style>
<button type="button" onclick="AddDiv()" >Add Div</button>
<div id="parent">
<div id="some_id1"></div>
<div id="some_id2"></div>
</div>
<div id="parent2"></div>
<script>
var div = document.getElementsByTagName("div");
var divCount = div.length;
var clickedDivId
for (var i = 0; i < divCount; i += 1) {
div[i].onclick = function(e) {
event.stopPropagation();
clickedDivId = this.id;
alert(this.id);
};
}
function AddDiv(){
var y = document.createElement('div');
y.id = 'some_id3';
document.getElementById("parent").appendChild(y);
}
</script>
【问题讨论】:
-
是的,在前面提到的答案中包含有关此问题的更多详细信息。我只是将您的代码编辑为此。
function dynamicAlert(e) { clickedDivId = this.id; alert(this.id); } function AddDiv(){ var y = document.createElement('div'); //y.id = 'some_id3'; y.setAttribute("id", "some_id3"); document.body.appendChild(y); y.onclick = dynamicAlert } -
感谢您的回复。接下来出现在新 div some_id3 上的事情不会发生 event.stopPropagation();如果我添加父 div 并创建一个新 div,我会注册两个 div。当我点击父母时, some_id1 和 some_id2 警报(this.id)只显示他们的 id。如果我单击新的 div some_id3 会显示警报 some_id3 和父级。我怎样才能避免这种情况只显示 some_id3?
-
创建新的 div 元素“some_id3”后,它不会获得事件绑定。因此,您必须强制该事件绑定才能获得结果。现在,当您单击新 div 时,它实际上只有父处理程序。因此,当您创建新元素时,请绑定您的函数并添加 event.stopPropagation()。例如:
function AddDiv(){ var y = document.createElement('div'); y.id = 'some_id3'; document.getElementById("parent").appendChild(y); y.addEventListener('click', function (e) { event.stopPropagation(); clickedDivId = this.id; alert(this.id); }, false); } -
非常感谢,我是 javascript 的初学者,所以我错过了很多 .. 如何将评论标记为答案?
-
stackoverflow.com/questions/56181151/…你能帮我举个例子吗?