我有一个动态元素添加到LI元素。当我在"模糊"中删除它时它活得很好。但是当我尝试在" keydown"中删除父元素时事件它会抛出一个错误,表明孩子可能已经在模糊事件中被移除。 该项目按预期被删除,流程继续,但我每次都在" keydown"事件
// I get the error in this event.
input.addEventListener('keydown', function (event) {
if (event.keyCode === 13) {
value = this.value;
this.parentElement.removeChild(this);
callBack.call(null,[value]);
}
});
//no error removing the element here
input.addEventListener('blur', function (event) {
value = this.value;
this.parentElement.removeChild(this);
callBack.call(null,[value]);
});
答案 0 :(得分:0)
当您在输入上触发模糊事件时,仅触发模糊事件。
当你触发删除输入的keydown事件时,模糊事件也会因删除而触发,并尝试删除已经消失的输入。
要查看此操作,请查看此示例:
http://jsfiddle.net/nate/kDKVy/
var input = document.getElementById('foo');
var valueDisplay = document.getElementById('value');
var value;
input.addEventListener('keydown', function (event) {
if (event.keyCode === 13) {
value = this.value;
valueDisplay.value = value;
this.parentElement.removeChild(this);
}
});
input.addEventListener('blur', function (event) {
console.log('BLUR');
value = this.value;
valueDisplay.value = value;
this.parentElement.removeChild(this);
});
打开你的控制台。首先,在红色框中键入内容,然后单击“离开”以触发模糊事件。请注意,它运行良好,您在控制台中看到“BLUR”。
再次运行小提琴。现在,在红色框中输入内容并按Enter键。请注意,在错误发生之前,您会在控制台中收到“BLUR”消息。
有意义吗?