javascript从输入[type=";submit";]中删除child(this)onclick中断了将来在firefox下使用form.submit()的过程
我遇到了一些奇怪的行为,我假设firefox中有一个bug,当从click事件中从DOM中删除input 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" />
<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的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报告?非常聪明,是的,这为我解决了这个问题,并且在这种情况下可能会成为一个可接受的解决方法。很高兴知道我不是唯一一个能够复制它的人,只是很惊讶我以前没有发现其他人报告过。谢谢