清除客户端验证中的错误消息rails gem

时间:2012-05-05 21:26:41

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

我在我的应用程序中使用客户端验证rails gem v3.1.0。我有一个表单显示在jquery对话框中,需要进行验证。在该表单上启用了客户端状态验证。一切都适用于验证,但当用户取消对话(不提交)时,我想清除任何现有的验证错误。这样,当用户再次触发对话框时,表单上已不存在验证错误。

我试图通过触发对话框关闭时每个元素的客户端状态验证传递事件来实现这一点 - 它通过删除包装错误字段和标签来工作。一个问题是后续验证在此代码之后不起作用。我觉得绑定事件已被删除,不再触发。

有没有更好的方法来实现这一目标?

我的jquery对话框:

$('#create_dialog').dialog({
            height: 260,
            width: 420,
            title: "title",
            buttons: {"<%= I18n.t("create") %>": function(e) {
                $('#new_segment').submit();
                },
                Cancel: function() {
                    var form = $('#new_segment');
                    form.find('[data-validate]:input').each(function() {
                        $(this).trigger('element:validate:pass');
                    });
                    $(this).dialog("close");

                    }
                }
        });

2 个答案:

答案 0 :(得分:1)

不是一种干净的方式,但这有效

/**
 * Remove Embedded validation perfectly that is compatible with validation gem
 * @param field
 * @returns {boolean}
 */
function removeValidationMessage(field) {
  var $field = $(field) || field;
  /**
   * First wrap the previously occurring label in wrapper div with class 'field_with_errors'
   * Then Wrap the field within a wrapper div of same class
   * Then add validation message after the field with class name 'message'
   */
  if ($field.siblings('.message').length > 0) {
    $field.parent().prev('.field_with_errors').find('label').unwrap();
    $field.unwrap();
    $field.next('.message').remove();
    return true;
  }
  return false;
}

答案 1 :(得分:0)

https://github.com/bcardarella/client_side_validations/issues/328

来自Client Side Validations gem的开发人员Brian Cardarella:

不幸的是,现在还没有一种干净的方法可以做到这一点。这将在4.0中发生变化