【发布时间】:2015-06-17 09:31:21
【问题描述】:
在我的网站上,我有一个导航和一个主要内容区域。当您单击导航链接时,主内容区域内的内容总是通过 ajax 加载。如果单击“联系”链接,则会加载一个文本,其中包含一个包含联系表单的 jQuery 对话框的链接。
问题:当您加载网站并导航到联系表单区域时,验证工作正常。但是,如果您导航到另一个内容区域(= 通过 ajax 加载另一个内容),然后返回联系表单区域并单击提交按钮(中间不重新加载页面),验证失败,被忽略并且表单动作被执行。如果您重新加载页面,然后导航到联系表单区域,一切都会再次运行。
我无法理解这种行为。奇怪的是:验证内容区域中未在 jQuery 对话框中打开的另一个表单始终有效,无论您之前单击了什么。所以这一定是因为 jQuery 对话框弹出和 Ajax。谁能理解这个问题?
我的代码来了:
HTML:
<a href="#popup-form-test" id="open-popup-form-test">open form test popup</a>
<div id="popup-form-test">
<form id="form-test" action="somelink">
<input type="text" placeholder="testtext eingeben" name="testText"></input>
<input type="submit" value="submit">
</form>
</div>
JS:
var dialogTest = $("#popup-form-test").dialog({
autoOpen: false,
modal: true,
close: function () {
console.log('closed');
}
});
$("#open-popup-form-test").on("click", function () {
dialogTest.dialog("open");
});
$('#form-test').validate({
debug: true,
rules : {
testText: {
required: true
}
},
submitHandler: function(form) {
alert('submitted');
}
});
【问题讨论】:
-
这可能是因为当您尝试将
.validate()方法绑定到它时,该表单不存在于DOM中,从而导致验证失败?一种可能的解决方法是不在运行时绑定方法,而仅在通过 AJAX 加载表单时才绑定。 -
我该如何解决这个问题?
-
如果没有概念验证示例(最小、具体和可验证的示例),几乎不可能进行故障排除。您可以使用 JSFiddle 或 StackOverflow 上的代码 sn-p 创建示例。
标签: javascript jquery ajax validation jquery-ui-dialog