我正在jQuery中编写一些表单验证代码。我注意到以下代码非常奇怪:
var $form = $('#test-form');
$form.on('submit', function(e) {
e.preventDefault();
validate();
});
function validate() {
console.log('in');
$form.submit();
}
我希望将console.log恢复一次,然后再提交表单。相反,我得到控制台日志大约700次,表单不提交。这可以在这个测试中看到:
这到底是怎么回事?
答案 0 :(得分:2)
使用本机提交绕过jQuery事件处理程序:
function validate() {
console.log('in');
$form.get(0).submit(); // same as document.getElementById("test-form").submit();
}
答案 1 :(得分:0)
你的代码中有一个无限循环:
var $form = $('#test-form');
$form.on('submit', function(e) {
e.preventDefault();/*Prevent form validation default event*/
validate();/*Call the function Validate*/
});
function validate() {
console.log('in');/*Log in the console*/
$form.submit();/*Call the default submit event of the form which get you back at line 4, this will go on fore ever.*/
}
你应该避免在$form.submit()
内validate()
因为它会导致无限循环。 validate()
应使用验证返回不重新提交表单的数据。
function AJAXValidation()
{
var request = $.ajax(
{
url: "Process.php",
type: "POST",
contentType:"application/x-www-form-urlencoded;charset=UTF-8",
data:
{
/*your data*/
}
});
/*call back fonction which is like your validate() function*/
request.done(
function(message)
{
/*Do stuff with message*/
});
}
此代码消息中的可以是JSON字符串,名称,日期,wahtever进程返回。