你有几个主要缺陷...
1)你的代码调用.validate()
......
$(document).on("click", '#loginbtn', function(e){
e.preventDefault();
$("#loginForm").validate();
alert('test');
//I want to do Ajax stuff
});
不要.validate()
在click
处理程序中调用,因为它只需要调用一次。该.validate()
方法不是在表单上调用验证的方法。它只是在表单上初始化插件的方法。因此,就像在您的工作示例中一样,您必须.validate()
在构建表单后立即调用,这通常在 DOM 就绪事件中。on('click')
可以删除上面的整个处理函数。
2)您打开对话框的代码...
open:function(){
$(this).html($("#formDiv").html());
},
在您的open
回调中,您将 HTML 从隐藏复制div
到您dialog
div
的表单中。这种技术的主要问题是你现在在同一个页面上有多个元素 with same id
。这不仅是无效的 HTML,而且 jQuery Validate 插件将仅适用于 this 的第一个实例,即原始隐藏实例id
。删除open
回调并将隐藏的附加div
到.dialog()
如下: $("#formDiv").dialog( ...
3) 您的评论表明您想使用 提交此表格ajax()
。如果是这种情况,请使用submitHandler
jQuery Validate 插件的回调函数。 根据文档,这是“在验证后通过 Ajax 提交表单的正确位置”。
$("#loginForm").validate({ // initialize the plugin
submitHandler: function (form) {
// your ajax here; // submit the data
$("#formDiv").dialog("close"); // close the dialog
alert('submitted with ajax'); // for demo
return false; // prevent regular form submit action
}
});
工作演示:http: //jsfiddle.net/TRHxZ/
$(document).ready(function () {
$("#loginForm").validate({ // initialize the plugin
submitHandler: function (form) {
// your ajax here; // submit the data
$("#formDiv").dialog("close"); // close the dialog
return false; // prevent regular form submit action
}
});
$("a#loginLink").on("click", function (e) {
e.preventDefault();
$("#formDiv").dialog({
closeOnEscape: false,
title: "Login Form",
modal: true,
resizable: false,
width: '350px',
position: 'fixed',
close: function () {
$(".ui-dialog-content").dialog("close");
}
});
});
});