【问题标题】:jQuery Validate on form that is destroyed/recreated with Knockout使用 Knockout 销毁/重新创建的表单上的 jQuery 验证
【发布时间】:2013-05-03 02:31:04
【问题描述】:

我有一个在 jQuery UI 对话框中的表单,每次我打开和关闭对话框时都会创建和销毁该对话框(作为敲除自定义绑定的一部分)。问题是 jQuery 验证在对话框第一次打开时起作用,但如果我关闭然后重新打开对话框,则不起作用。

这是 jQuery UI 对话框中表单的简化 sn-p:

<div id="product-panel" data-bind="dialog: { autoOpen: false, destroyOnClose: true }, showDialog: $parent.selectedProduct">
    <form data-bind="submit: saveMe" id="product-form" method="post">

        <label>
            Name
            <input type="text" id="productName" name="productName" data-bind="value: productName">
        </label>

        <button type="submit" class="button">save</button>
    </form>
</div>

我也会显示 ko.bindingHandlers.dialog 的内容,但我认为它与问题无关。关于对话框自定义绑定需要了解的一件事是,它将 jQuery UI 对话框配置为在关闭时销毁。

每当对话框再次打开时,我使用 jQuery 的 on() 方法将验证重新绑定到表单:

$("body").on("dialogopen", "#product-panel", function(event) { 
    $('#product-form').validate({
        rules: {
            productName: { 
                required: true
            }
        }
    });
});

有什么想法吗?哦,我不想使用淘汰赛验证(出于其他原因)。

jquery 2.0、jquery ui 1.9.2、jquery 验证 1.11.1、淘汰赛 2.2.0

【问题讨论】:

  • 我认为,当您“销毁”对话框时,验证对象也会被销毁,使用 console.debug($('#product-form')); 验证它(在 chrome 中或在 firefox 中使用 firebug)它会在DOM 元素
  • 也许destroyOnClose: false 设置可以解决您的问题?
  • 除非.on("dialogopen") 不是有效方法,否则您的代码似乎没有任何问题。你能构建一个 jsFiddle 演示吗?
  • .on("dialogopen"... 事件处理程序是否会在您期望的时候触发?
  • 在.on("dialogopen"... 事件处理程序中,对 $('#product-form') 的调用是否找到您的表单?

标签: jquery knockout.js jquery-validate jquery-ui-dialog


【解决方案1】:

您究竟为什么要销毁并重新创建您只想打开->关闭->打开->关闭->等的东西?

如果 jQuery Validation 在第一次打开时正在工作,那么不要破坏它,因为无论如何你都需要再次使用它。

destroyOnClose: false

如果你从不销毁它,你就不用再打电话给.validate(),所以你可以摆脱这个......

$("body").on("dialogopen", "#product-panel", function(event) { 
    $('#product-form').validate({...});
});

【讨论】:

  • 我最终采纳了您的建议并删除了自定义 destroyOnClose 功能。我的问题是我用&lt;!--ko with: variableName --&gt; 包装了淘汰赛dialog,这导致每次我更新variableName 时都会弹出一个新对话框。为了解决这个问题,我只是将ko with 移动到对话框内部而不是外部。不过,我仍然想保持答案“开放”,因为我想看看是否有人知道如何重置 jQuery 验证。
  • @eh1160,一旦初始化,就不存在“重置”jQuery Validate 的方法。
猜你喜欢
  • 2018-05-08
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多