0

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

这是 jQuery UI 对话框中表单的简化片段:

<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

4

1 回答 1

1

你究竟为什么要破坏和重新创建你只想打开->关闭->打开->关闭->等的东西?

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

destroyOnClose: false

而如果你从不破坏它,你就不用再调用.validate()了,这样你就可以摆脱它了……

$("body").on("dialogopen", "#product-panel", function(event) { 
    $('#product-form').validate({...});
});
于 2013-05-03T16:33:47.430 回答