我正在编写一个 chrome 扩展,当用户提交表单时需要做一些工作。我有一个在后台运行的内容脚本,它运行以下代码:
$(document.body).on('submit', 'form', function () {
doWork();
});
这在大多数网站上都能完美运行,但在 twitter 的登录表单上会中断。但奇怪的是,它并没有完全崩溃。如果我单击twitter 上的“登录”按钮,该doWork()
功能将运行。但是,如果我按 Enter提交表单,doWork()
则永远不会运行。
在我努力调试的过程中,我将我的代码复制并粘贴到开发工具中以重新绑定该函数,并查看它是否有效。确实如此——即使使用回车,新的绑定也有效。
我的下一个想法是,也许 jQuery.on 没有处理通过 javascript 创建的元素(假设按钮通过 javascript 提交了一个隐藏的动态创建的表单,而不是可见的表单,出于某种原因)。因此,我像上面一样重新启动事件,但添加了一行以提醒我提交表单的类名 - 所有表单在 twitter 登录页面上都有唯一的类名。
不幸的是,您可能已经猜到了,单击“登录”与按 Enter 会以相同的类名发出警报 - 因此,无论我以哪种方式看待它,我都有一个绑定到该表单提交的事件,但出于某种疯狂的原因当我按下回车键时没有被调用。