2010-01-14 51 views
0

我试图使用jQuery表单插件来动态地提交一个表单上的变化。为什么我陷入这个AJAX提交循环?

这绝对有效,但每次用户更改输入值时,它都会执行.post,运行我的成功“alert()”,然后反复重复,直到刷新页面以停止循环。这里的代码:

<!DOCTYPE html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>AJAX Form Test Suite</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script> 
<script src="_scripts/jquery.form.js"></script> 
<script> 
    $(document).ready(function() { 
    var options = { 
     success:  alertYes // post-submit callback 
    }; 

    // binding to each input's change event 
    $('#mainForm input').change(function() { 

     $(this).parent().ajaxSubmit(options); 

     return false; 
    }); 

    //success callback function 
    function alertYes() {  
     alert('You did it!'); 
    } 
}); 
</script> 
</head> 

<body> 
<div id="ajaxMessage"> 
<h1>This is a suite AJAX form</h1> 
<form id="mainForm" action="saveForm.php" method="post"> 
    <ul class="nolist"> 
    <li class="label"><label>Name</label></li> 
    <li class="input"><input type="text" name="name" value="Eric Roberts" /></li> 
    <li class="label"><label>Email</label></li> 
    <li class="input"><input type="text" name="email" value="[email protected]" /></li> 
    <li class="label"><input type="submit" name="submit" value="DO IT" /></li> 
    </ul> 
</form> 
</div> 
</body> 
</html> 

我做错了什么使它不断循环呢?我假设这是当post.post返回时,警告之后,它会再次模糊一个重新提交ajax调用的输入,但我不知道为什么它会这样做?

谢谢。

+0

PS这里是我使用的表格插件:http://jquery.malsup.com/form/ – rhodesjason 2010-01-14 19:23:28

回答

4

我相信你的alert()调用导致表单的blur()事件触发,从而使表单重新提交。


更新

如果你使用Firebug,你可以使用下面的JavaScript:

console.debug('my message goes here'); 

发出消息Firebug控制台。我通常把它包在这样一个电话:

function status(msg) 
{ 
    if(console) 
    console.debug('# '+msg); 
    } 
} 

,然后调用状态(“我的信息在这里......”)我在JavaScript中发出任何调试/跟踪,我需要的信息。通过在函数中包装它,就像我上面所做的那样,确保代码在没有定义控制台对象的浏览器(IE或任何没有安装Firebug的浏览器)中运行时仍然可以工作。

+0

是的,先生,就是这样。我没有意识到alert()会产生blur()触发器。我不需要警报,只是用它来测试,所以很容易修复。谢谢! – rhodesjason 2010-01-14 19:31:58

1

任何机会我可以说服你绑定到输入上的.change事件吗?这可能会解决这个问题,你会避免很多不必要的提交。现在,如果有人在表单中输入内容(不更改任何内容),它会提交,这是一个毫无意义的提交。 。改变可能更接近你想要做的事情。

+0

谢谢,这是真的。我担心.change会在每次更改按键时提交表单,但情况并非如此? – rhodesjason 2010-01-14 19:28:36

+0

不,那将是keyup或keydown事件。从jQuery文档:当控件失去输入焦点并且自获得焦点后修改其值时,更改事件触发。 – Parrots 2010-01-14 19:33:37

+0

太棒了。再次感谢。 – rhodesjason 2010-01-14 20:22:01