捕获事件或异常“无效的表单控件”
Capture event or exception “Invalid form control”
使用我的一个表单时,我得到了错误 "An invalid form control with name='collectors' is not focusable.",我明白为什么,因为它被一些 JS-lib 隐藏了,而且我已经知道传播的 "problem" 的解决方法。我的问题是另一个:
该消息是异常或事件的一部分吗?我可以轻松地收听并直接执行 "things" 吗?还是我唯一能做的就是覆盖基础表单的提交事件并自己检查?
我宁愿避免后者,让浏览器来完成工作,如果它们可以打印到控制台,我可能有机会以某种方式拦截浏览器的知识,并且只在已经完成的情况下做一些事情知道它是需要的。
我好像在寻找类似 Is there a way in JavaScript to listen console events? 的东西,但也许在表单验证等过程中有一些特殊的错误事件,这更正式,也更少 hacky。
看起来答案比预期的要简单:使用纯 jQuery,您可以简单地绑定到具有 "required" 属性的输入上的 "invalid" 事件,并且似乎总是被触发,无论输入是否可见。
self.element.bind('invalid', function(event) { alert('collectors'); });
$('input[type="file"]').bind('invalid', function(event) { alert('file'); });
在我的例子中,"collectors" 是一个隐藏的文本输入,只要它没有任何值并且我想提交表单,事件就会触发。另一个有趣的事情是,至少 Chrome 似乎首先关注所有其他已经可见的必需输入,但没有任何有效值,因为如果我手动关注我的 "collectors" 事件处理程序中的某些元素,它似乎是忽略直到文件输入有一个值,该值由 Chrome 自动聚焦。
似乎不起作用的是使用 window.onerror 或 console.error 过滤其开发控制台中的消息 Chrome 输出。那些根本没有被调用,我猜错误消息没有通过 JS,而是直接来自浏览器内部的错误。
使用我的一个表单时,我得到了错误 "An invalid form control with name='collectors' is not focusable.",我明白为什么,因为它被一些 JS-lib 隐藏了,而且我已经知道传播的 "problem" 的解决方法。我的问题是另一个:
该消息是异常或事件的一部分吗?我可以轻松地收听并直接执行 "things" 吗?还是我唯一能做的就是覆盖基础表单的提交事件并自己检查?
我宁愿避免后者,让浏览器来完成工作,如果它们可以打印到控制台,我可能有机会以某种方式拦截浏览器的知识,并且只在已经完成的情况下做一些事情知道它是需要的。
我好像在寻找类似 Is there a way in JavaScript to listen console events? 的东西,但也许在表单验证等过程中有一些特殊的错误事件,这更正式,也更少 hacky。
看起来答案比预期的要简单:使用纯 jQuery,您可以简单地绑定到具有 "required" 属性的输入上的 "invalid" 事件,并且似乎总是被触发,无论输入是否可见。
self.element.bind('invalid', function(event) { alert('collectors'); });
$('input[type="file"]').bind('invalid', function(event) { alert('file'); });
在我的例子中,"collectors" 是一个隐藏的文本输入,只要它没有任何值并且我想提交表单,事件就会触发。另一个有趣的事情是,至少 Chrome 似乎首先关注所有其他已经可见的必需输入,但没有任何有效值,因为如果我手动关注我的 "collectors" 事件处理程序中的某些元素,它似乎是忽略直到文件输入有一个值,该值由 Chrome 自动聚焦。
似乎不起作用的是使用 window.onerror 或 console.error 过滤其开发控制台中的消息 Chrome 输出。那些根本没有被调用,我猜错误消息没有通过 JS,而是直接来自浏览器内部的错误。