你有幾個主要缺陷...
1)您的代碼稱爲.validate()
...
$(document).on("click", '#loginbtn', function(e){
e.preventDefault();
$("#loginForm").validate();
alert('test');
//I want to do Ajax stuff
});
請勿在click
處理程序中調用.validate()
,因爲它只需要調用一次。 .validate()
方法不是在窗體上調用驗證的方法。這只是初始化表單上的插件的方法。因此,就像在您的工作示例中一樣,您必須在窗體構建完成後立即調用.validate()
,這通常在DOM ready事件中。上面的整個on('click')
處理函數都可以被刪除。
2)打開的對話框中您的代碼...
open:function(){
$(this).html($("#formDiv").html());
},
在您open
回調,您複製從隱藏div
HTML到您的dialog
div
的形式。這種技術的主要問題是,您現在在同一頁面上有多個元素,並且具有相同的id
。這不僅是無效的HTML,而且jQuery Validate插件只適用於這個id
的第一個實例,即原始的隱藏實例。取出open
回調並附加隱藏div
到.dialog()
這樣的:$("#formDiv").dialog(...
3)您的評論表示您要提交此表格ajax()
。如果是這種情況,請使用jQuery Validate插件的submitHandler
回調函數。 As per documentation,這是「在經過驗證後通過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");
}
});
});
});
題外話:_「關於與你寫必須說明具體問題的代碼問題的問題 - 和包括有效的代碼重現它在問題本身中**,請參閱[SSCCE.org](http://sscce.org)以獲得指導。「_〜你的所有jQuery在哪裏? – Sparky