2010-01-14 48 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