覆盖client_side_validations行为以验证隐藏字段

时间:2013-01-06 21:24:54

标签: ruby-on-rails client-side-validation

我在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() 

这似乎有效。还有更好的方法吗?

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

3 个答案:

答案 0 :(得分:5)

如果要验证隐藏字段是如何做的

答案 1 :(得分:1)

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

3.2-stable分支上的

This code显示了它是如何完成的。

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

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

答案 2 :(得分:0)

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

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

然后选择器应该是这样的:

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