【发布时间】: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