【问题标题】:jQuery remove validationEngine at runtimejQuery在运行时删除validationEngine
【发布时间】:2012-02-23 08:20:34
【问题描述】:

我正在使用 validationEngine 脚本来验证表单。我初始化它:

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

我并没有真正通过提交按钮提交表单。我使用带有onclick 事件的锚元素,该事件调用saveElement() 函数。在这个函数中我调用:

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

效果很好。

紧接着,我重置了字段(例如,输入字段的内容为""),通过这些字段,需要的字段开始显示错误。

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

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

有没有人建议我如何删除验证引擎?

解决方法

真的好像没有解除绑定的方法。我在 github 项目中添加了一个问题。也许他们会实现一个 unbind 方法: https://github.com/posabsolute/jQuery-Validation-Engine/issues/287

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

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

仍然打开

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

【问题讨论】:

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


    【解决方案1】:

    这个问题还没有解决。我需要在现有应用程序中禁用验证,以允许在不验证表单的情况下发生回发事件。我通过使用如下正则表达式删除验证类成功地做到了这一点:

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

    【讨论】:

      【解决方案2】:

      我认为你真的过度设计了一些东西。这可能不是您期望的答案,但我认为您应该这样做:

      首先,在要提交的锚元素上,这样做:

      $('#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 时,您的表单将永远不会被提交。

      顺便说一句,看起来验证引擎没有“解除绑定”。请参阅此处获取解决方案:Remove JQuery validationEngine from form

      【讨论】:

      • 不幸的是,这对我不起作用。我并没有真正提交表单,而是通过 ajax 请求将数据发送到服务器。而且我无法删除表单,因为我使用相同的表单来编辑所有元素。而且无论我隐藏它还是slideUp(我使用),仍然会显示错误。它们只是显示在空白背景上。
      • 我不提倡你使用,那么(实际上也不是我的解决方案)。几乎每个网站都必须使用很好的降级 javascript。
      • 为此目的使用锚元素而不是提交元素有什么区别?我不敢相信,当您通过 AJAX 请求发送数据时,您必须销毁表单元素以删除验证引擎。没有别的办法吗?
      • 当然不会提交,但我正在那里开发应用程序而不是普通网站。 Javascript是一项要求,没有使用就无法使用它。我搜索了stackoverflow,找到了这个答案。但他们没有解决我的问题。他们使用提交并通过提交发送,这在我的版本中有所不同。
      • 嗯,这就是我说“几乎每个网站”的原因 :-) 不过,您可以使用我的技巧仍然使用提交部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 2012-02-24
      • 1970-01-01
      相关资源
      最近更新 更多