覆盖client_side_validations行为来验证隐藏字段(Override client

2019-10-17 13:00发布

我现在用的是client_side_validations使用Rails 3.1.0宝石。 我一直在试图用它来验证是通过一个JavaScript小部件设置的隐藏字段。 从我已阅读宝石的GitHub的页面上,宝石故意不验证隐藏字段,因为用户不能纠正这些领域。 我曾经失败试图覆盖此行为。

有没有一种方法来覆盖这个行为对于特定的领域,而无需修改代码client_side_validations(除了当您安装宝石获取生成初始化的东西除外)?

我现在已经做了它的方式是通过做少许修改的宝石validateForm功能。 当它看起来的领域,以验证它只能抓住那些可见的元素:

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

所以我改变了这个:

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

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

我一直没能当用户纠正自己的错误,重新验证隐藏字段。

Answer 1:

如果您想验证隐藏字段是如何做到这一点



Answer 2:

@mushroom被问及client_side_validations 3.1版,但对于使用版本3.2.x中的人,这是目前配置。

这段代码在3.2-STABLE分支表明它是如何做。

您将需要重写window.ClientSideValidations.selectors.validate_inputswindow.ClientSideValidations.selectors.inputs一次加载页面。 至于包括散列中的隐藏元素的验证,我的建议是加载与元素可见的页面,并立即运行$('#id_of_hidden_element').attr('type', 'hidden')

或者,你可以使输入元素type='text' ,并使用opacity:0在CSS样式表,使其不可见。 请注意,这有其他的副作用,如使其可获得焦点。



Answer 3:

我认为,更好的办法是通过添加“身份证”或“类”验证它

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

然后选择应该是这样的:

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



文章来源: Override client_side_validations behavior to validate hidden fields