Javascript 未能执行';替换儿童';在';节点';,除了它没有';你不会失败吗?

Javascript 未能执行';替换儿童';在';节点';,除了它没有';你不会失败吗?,javascript,html,Javascript,Html,我在使用.replaceChild()时遇到此错误,尽管在使用.outerHTML时也遇到类似错误。只有在运行labelSubmit()时才会弹出错误;直接运行labelFocusLost()不会抛出错误。令人沮丧的是,它并没有失败。它实际上是有效的,但Chrome无论如何都会抛出一个错误。它在技术上是功能性的,所以如果这只是一个奇怪的Chrome bug,那也没什么大不了的,但是如果可能的话,我真的希望我的日志中没有错误 函数标签submit(文字){ const key=event.key.

我在使用
.replaceChild()
时遇到此错误,尽管在使用
.outerHTML
时也遇到类似错误。只有在运行
labelSubmit()
时才会弹出错误;直接运行
labelFocusLost()
不会抛出错误。令人沮丧的是,它并没有失败。它实际上是有效的,但Chrome无论如何都会抛出一个错误。它在技术上是功能性的,所以如果这只是一个奇怪的Chrome bug,那也没什么大不了的,但是如果可能的话,我真的希望我的日志中没有错误

函数标签submit(文字){
const key=event.key.toLowerCase()
const exit=key==“escape”| key==“enter”
if(exit){labelFocusLost(literal)}
}
函数labelFocusLost(文字){
const param=literal.split(“:”)
const target=event.target
常量逃逸=假
const prev={
索引:param[0],
选项:参数[1],
名称:target.value.toLowerCase()| | param[2]
}
常量标签=`${escape?param[2]:prev.name}`
target.parentNode.parentNode.replaceChild(textToHTML(标签),target.parentNode)
//target.parentElement.outerHTML=标签
}

脱脂标签
默认选项卡
+

@Batu.Khan意外地为我指出了正确的方向,所以我在这里发布了解决方案


结果不是这样的。运行
labelFocusLost()
会 从DOM中删除元素。但是一旦元素消失了,, 焦点也将丢失在元素上,因此
labelFocusLost()
将 再次触发。除此之外,将不再有要删除的元素。 解决这个问题的方法很简单;而不是跑步
labelFocusLost()
,只需使用
.blur()
,它将依次运行
labelFocusLost()
并删除 元素。因为焦点已经被移除,所以它不会运行 第二次

这一修正最终是公正的

if(exit){event.target.blur()}

您试图使用
事件
,但没有将其发送到函数中。事实证明,事实并非如此。运行
labelFocusLost()
将从DOM中删除该元素。但是,一旦元素消失,焦点也将丢失在元素上,因此
labelFocusLost()
将再次触发。除此之外,将不再有要删除的元素。解决这个问题的方法很简单;不要运行
labelFocusLost()
,只需使用
.blur()
强制元素失去焦点,这将依次运行
labelFocusLost()
并移除元素。因为焦点已经被移除,所以不会再运行第二次。
<div id="tabs" class="grid-tabs debug">
    <input id="tabs-0" type="radio" name="tabs" class="no-display" checked="">
        <div class="default-text input-wrapper">
            <span class="clear input-measure">defaualt tab</span>
            <input maxlength="15" class="clear default-text input" placeholder="input new name here" value="defaualt tab" oninput="labelInput('input new name here')" onkeydown="labelSubmit('0:button-choice:defaualt tab')" onfocusout="labelFocusLost('0:button-choice:defaualt tab')" style="width: 113px;">
        </div>
    <input id="tabs-1" type="radio" name="tabs" class="no-display" />
        <label for="tabs-1" class="default-text radio-label button" onpointerup="tabClick()">default tab</label>
    <button data-choice="" class="clear default-text button" onclick="addTab()">+</button>
</div>