javascript从输入[type=";submit";]中删除child(this)onclick中断了将来在firefox下使用form.submit()的过程

javascript从输入[type=";submit";]中删除child(this)onclick中断了将来在firefox下使用form.submit()的过程,javascript,html,dom,javascript-events,Javascript,Html,Dom,Javascript Events,我遇到了一些奇怪的行为,我假设firefox中有一个bug,当从click事件中从DOM中删除input submit元素时 以下代码复制了该问题: <form name="test_form"> <input type="submit" value="remove me" onclick="this.parentNode.removeChild(this);" /> <input type="submit" value="submit normally" />

我遇到了一些奇怪的行为,我假设firefox中有一个bug,当从click事件中从DOM中删除input submit元素时

以下代码复制了该问题:

<form name="test_form">
<input type="submit" value="remove me" onclick="this.parentNode.removeChild(this);" />
<input type="submit" value="submit normally" />
<input type="button" value="submit via js" onclick="document.test_form.submit();" />
</form>

复制:

  • 单击“删除我”
  • 点击“通过js提交”。注意表单没有被提交,这就是问题所在
  • 点击“正常提交”。请注意,表单仍然正常提交
在Firefox下,如果您从click事件中删除submit按钮,它会使表单处于无效状态,因此将来对form.submit()的任何调用都会被忽略。但这是一个特定于javascript的问题,因为此表单中的正常提交按钮仍然可以正常工作

老实说,这是一个如此简单的例子,我本以为互联网上会充斥着使用它的人,但到目前为止,搜索毫无用处

还有其他人经历过这种情况吗?如果是的话,你有没有追根究底


非常感谢

似乎与您在处理事件时删除节点有关。
这看起来确实像是来自Firefox的bug

与此同时,这一黑客似乎奏效了,但推迟了删除:

<script type="text/javascript">
function delsubmit(el) {
    window.setTimeout(function() {
        el.parentNode.removeChild(el);
    }, 50);

    return false;
}
</script>

<input type="submit" value="remove me" onclick="return delsubmit(this)" />

功能提交(el){
setTimeout(函数(){
el.parentNode.removeChild(el);
}, 50);
返回false;
}

你能解释一下你到底想实现什么吗?我上面的例子是我能提供的最简单的代码,它仍然再现了这个问题;当然,现实世界的例子要复杂得多。我会给你一些背景资料。。。基本上,我有一个绝对定位的DIV,它在html页面顶部作为一个模式对话框运行。它有一个“取消”按钮,它是一个输入提交元素。单击此按钮将处理对话框DIV,从而“关闭”对话框,但由于此问题,表单(包装整个页面)将无法使用。如果取消按钮的目的不是提交表单,为什么需要取消按钮?您是否使用
type=“button”
尝试过它?是的,这确实解决了问题,但我需要将其设置为type=“submit”,这样当javascript关闭时,它会优雅地降级。Ofc,在打开javascript的情况下,我可以简单地用一个按钮替换提交,但我认为我们忽略了一点:为什么firefox会这样做,我所做的有什么实质性的错误吗?每个人都能可靠地复制它吗?因此,我是否应该在firefox中将它作为一个bug注销并提交一份bug报告?非常聪明,是的,这为我解决了这个问题,并且在这种情况下可能会成为一个可接受的解决方法。很高兴知道我不是唯一一个能够复制它的人,只是很惊讶我以前没有发现其他人报告过。谢谢