我的代码很简单:
document.getElementById("number").addEventListener('click', test);
var i = 1;
function test(event) {
document.getElementById("number").outerHTML = '<span id="number">' + (i++) + '</span>';
}
&#13;
<span id="number">0</span>
&#13;
但这只是首次点击。下一个eventListener无法正常工作。如何才能使其发挥作用?
答案 0 :(得分:2)
你可以尝试使用innerHTML而不是outerHTML(后者重新创建你的元素;不再添加事件监听器) 0
<script>
document.getElementById("number").addEventListener('click', test);
var i = 1;
function test(event) {
document.getElementById("number").innerHTML = i++;
}
</script>
否则,你可以这样重置事件监听器,同时仍然使用outerHTML
<span id="number">0</span>
<script>
document.getElementById("number").addEventListener('click', test);
var i = 1;
function test(event) {
document.getElementById("number").outerHTML = '<span id="number">' + (i++) + '</span>';
document.getElementById("number").addEventListener('click', test);
}
</script>
答案 1 :(得分:2)
document.getElementById("number").addEventListener('click', test);
var i = 1;
function test(event) {
this.innerHTML = i++;
}
&#13;
<span id="number">0</span>
&#13;
不要使用outerHTML,它会返回该DOM内容,而您正在创建另一个span,因此eventlistener无效,要使用innerHTML替换内部内容。
答案 2 :(得分:1)
我想你想要这样的东西。
document.getElementById("number").addEventListener('click', test);
function test(event) {
var obj = document.getElementById("number");
console.log(obj.innerHTML);
var i = parseInt(obj.innerHTML);
obj.innerHTML = ++i;
}
<span id="number">0</span>
无需使用outerHTML
,否则您需要在每次点击中添加听力
答案 3 :(得分:0)
您替换整个元素,使其成为新元素。事件发生在旧的“数字”元素上,事件不重新绑定。在更新文本时替换整个元素是没有意义的。使用innerHTML或textContent
function test(event) {
document.getElementById("number").innerHTML = i++;
}
答案 4 :(得分:0)
您正在覆盖点击内部元素“number”的html,导致再次删除侦听器: 以下应该有效:
<script>
document.getElementById("number").addEventListener('click', test);
var i = 1;
function test(event) {
document.getElementById("number").outerHTML = '<span id="number">' + (i++) + '</span>';
document.getElementById("number").addEventListener('click', test);
}
</script>