【发布时间】:2014-06-05 18:56:58
【问题描述】:
我正在考虑的几件事:
可以在任何时间点将表单插入到 dom 中。一个 dom 就绪的监听器和对
document.forms的迭代不是一个选项。添加这个提交捕获逻辑是一个不错的选择,它应该可以跨浏览器工作,但添加
jQuery使其工作将是矫枉过正。我们正在使用一个非常繁重的 dom 操作框架,该解决方案不应损害整体应用程序的性能。
我不想添加 dom 插入侦听器,因为它们很慢而且 我们使用的框架经常将项目插入到 dom 中。
覆盖HTMLFormElement.prototype.submit 在.submit() 以编程方式调用时有效,但在用户通过纯粹的浏览器交互触发表单提交时无效。我发现收听提交事件适用于这两种情况,但为了收听事件,您需要引用每个表单实例。所有表单实例都可以通过document.forms 获取,但document.forms 是一个HTMLCollection,并且没有用于监视更改MutationObservers 的api 仅适用于Nodes 而不是HTMLCollections。我认为可行的两种方法似乎很混乱。
setInterval可用于监视document.forms,如果已将新表单添加到HTMLCollection,则将侦听器添加到表单中。在将
form插入到dom 时,监控文档突变事件并添加监听器。
我尝试过的其他丑陋的方法不起作用:
使用
Object.defineProperty作为document.forms的长度属性。重写
HTMLFormElement的构造函数以运行正常的构造逻辑,然后为submit添加一个事件监听器。
关于如何做的任何建议?我倾向于使用setInterval,但不能保证这种方法在所有情况下都有效。
【问题讨论】:
标签: javascript forms dom