捕获事件或异常“无效表单控件”

Capture event or exception “Invalid form control”

本文关键字:无效 表单 控件 异常 事件      更新时间:2023-09-26

对于我的一个表单,我得到了错误"一个名为"collectors"的无效表单控件不可聚焦。"我确实理解原因,因为它被一些JS库隐藏了,我已经知道传播的"问题"的解决方法。我的问题是另一个:

这条消息是一个例外或事件的一部分吗?我可以很容易地倾听并只做"事情"吗?或者我唯一能做的就是覆盖基础表单的提交事件并自己检查?

我宁愿避免后者,让浏览器来做这项工作,如果它们可以打印到控制台,我可能会以某种方式截获浏览器的知识,只在已知需要的时候做一些事情。

我似乎在寻找这样的东西:在JavaScript中有办法监听控制台事件吗?,但是,对于表单验证过程中的错误,可能会有一些特殊的事件,这更正式,也不那么棘手。

看起来答案比预期的要容易:使用普通jQuery,您可以简单地绑定到具有"required"属性的输入上的"invalid"事件,无论输入是否可见,该事件似乎总是被激发。

self.element.bind('invalid', function(event) { alert('collectors'); });
$('input[type="file"]').bind('invalid', function(event) { alert('file'); });

在我的例子中,"collectors"是一个隐藏的文本输入,每当它没有任何值,并且我想提交表单时,事件就会触发。另一件有趣的事情是,至少Chrome似乎首先关注所有其他已经可见的、没有任何有效值的必需输入,因为如果我手动关注"collecters"事件处理程序中的某个元素,它似乎被忽略了,直到文件输入有一个值,Chrome自动聚焦。

似乎不起作用的是使用window.onerror或console.error来过滤Chrome在其开发控制台中输出的消息。这些根本不会被调用,我想错误消息不会传递JS,而是作为错误直接来自浏览器内部。