覆盖client_side_validations行为以validation隐藏字段

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

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

我现在这样做的方法是对gem中的validateForm函数稍作修改。 当它查找要validation的字段时,只会抓取可见的元素:

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

所以我改变了这个:

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

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

当用户纠正错误时,我无法重新validation隐藏字段。

如果要validation隐藏字段是如何执行的

@mushroom询问了client_side_validations版本3.1,但是对于使用版本3.2.x的任何人来说,这是可配置的。

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

页面加载后,您需要覆盖window.ClientSideValidations.selectors.validate_inputswindow.ClientSideValidations.selectors.inputs 。 至于在哈希中包含隐藏元素的validation,我的建议是加载具有可见元素的页面,并立即运行$('#id_of_hidden_element').attr('type', 'hidden')

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

我认为更好的方法是通过添加’id’或’class’来validation它

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

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