1

我正在使用带有 Rails 3.1.0的client_side_validations gem。我一直在尝试使用它来验证通过 javascript 小部件设置的隐藏字段。从我在 gem 的 github 页面上读到的内容来看,gem 故意不验证隐藏字段,因为用户无法更正这些字段。我没有成功尝试覆盖此行为。

有没有办法在不修改 client_side_validations 代码(安装 gem 时生成的 init 内容除外)的情况下覆盖特定字段的此行为?

我现在所做的方法是对 gem 中的 validateForm 函数进行轻微修改。当它查找要验证的字段时,它只会抓取可见的元素:

form.find(':input:enabled:visible[data-validate]').each(function() 

所以我把它改成了这样:

form.find(':input:enabled[data-validate]').each(function() 

这似乎有效。有没有更好的办法?

当用户更正错误时,我无法重新验证隐藏字段。

4

3 回答 3

5

如果您想验证隐藏字段,请执行此操作

于 2013-01-07T23:18:50.847 回答
1

@mushroom 询问了 client_side_validations 3.1 版,但对于使用 3.2.x 版的任何人,现在都可以配置。

3.2-stable 分支上的这段代码显示了它是如何完成的。

一旦页面加载window.ClientSideValidations.selectors.validate_inputs,您将需要覆盖。window.ClientSideValidations.selectors.inputs至于在哈希中包含对隐藏元素的验证,我的建议是加载元素可见的页面,然后立即运行$('#id_of_hidden_element').attr('type', 'hidden').

或者,您可以只制作输入元素type='text'opacity:0在 CSS 样式表中使用以使其不可见。请注意,这还有其他副作用,例如使其可聚焦。

于 2014-06-06T18:27:55.190 回答
0

我认为更好的方法是通过添加“id”或“class”来验证它

<input type="hidden" id="validate_me">

那么选择器应该是这样的:

':input:enabled:visible[data-validate], #validate_me'

于 2017-09-06T06:21:41.470 回答