【问题标题】:when removing a child element I get an error that it may have already been removed in a "blur" event删除子元素时,我收到一个错误,它可能已在“模糊”事件中被删除
【发布时间】:2013-11-29 11:51:18
【问题描述】:

我在 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]);  
    });

【问题讨论】:

    标签: javascript dom


    【解决方案1】:

    当您在输入端触发 blur 事件时,只会触发 blur 事件。

    当您触发删除输入的 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”消息。

    有意义吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      相关资源
      最近更新 更多