jQuery在运行时删除validationEngine

时间:2012-02-23 08:20:34

标签: javascript jquery forms validation jquery-validation-engine

我正在使用validationEngine脚本来验证表单。我用它来启动它:

$("#formid").validationEngine();

我并不是真的通过提交按钮提交表单。我使用带有onclick事件的锚元素调用saveElement()函数。在这个函数中我打电话:

$("#formid").validationEngine('validate');

效果很好。

在此之后,我将字段(例如,输入字段的内容重置为"")重置,所需的字段开始显示错误。

为了防止发生这些错误,我想从表单元素中删除validationEngine。但我无法删除它。我尝试了各种选项,包括下面的选项,但都没有。

$('#formid').validationEngine('hideAll'); // To hide the error messages
$('#formid').validationEngine('detach');  // To remove the validationEngine

有没有人建议我如何删除validationEngine?

解决方法

它确实没有任何解绑方法。我在github项目中添加了一个问题。也许他们会实现一个解绑方法: https://github.com/posabsolute/jQuery-Validation-Engine/issues/287

作为一种解决方法,我想出了以下解决方案: 你可以:

  • 使用jQuery.clone()复制没有事件的表单,删除原始表单并再次将validationEngine添加到表单
  • 删除表单元素上的验证类,将它们存储在数组中并在重置表单后再次插入

仍然开放

也许有更好的解决方案或解决方法。如果你知道,请告诉我。

2 个答案:

答案 0 :(得分:2)

这个问题仍然没有解决。我需要在现有应用程序中禁用验证,以允许在不验证表单的情况下进行回发事件。我通过使用如下正则表达式删除验证类来成功完成此操作:

// Work around
$('[class*="validate"]').each(function () {
      var _this = $(this);
      _this.attr("class", _this.attr("class").replace(/validate\[.*]+\s?/, ""));
});

答案 1 :(得分:1)

我认为你真的是过度工程。这可能不是您预期的答案,但我认为您应该这样做:

首先,在要提交的锚元素上,执行以下操作:

$('#anchorElement').click(function() {
    $('#formid').submit()
})

然后,您可以这样做以在提交后删除表单:

$('#formid').submit(function() {
    // Do your submitting stuff, like validating.
    $(this).remove()
    // Or use $(this).hide() if you simply want to hide it.
})

但我不提倡使用锚元素的方法。对于几乎每个网站来说,几乎都是必须降级。

问题是,当您的用户未启用JavaScript时,您的表单将永远不会被提交。

顺便说一句,看起来没有“unbinding”的validationengine。请参阅此处获取解决方案:Remove JQuery validationEngine from form