当删除子元素时,我得到一个错误,它可能已经在“模糊”事件中被删除

时间:2013-11-29 03:05:21

标签: javascript dom

我有一个动态元素添加到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]);  
    });

1 个答案:

答案 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”消息。

有意义吗?