私はjQueryフォームプラグインを使用して、同じページ上の2つのフォームの送信イベントをバインドし、ページ上の別々のdivにマークアップを返す別々のPHPスクリプトに送信されるようにしています。
1つのフォームが次のフォームを更新します。私は「ライブ」を使用しているので、各フォームは更新されたときにイベントがリバウンドされます。
$(document).ready(function() {
/* Form 1 */
$('#frmSearch').live('submit', function() {
$(this).ajaxSubmit({
target: '#divResults',
url: 'search_div.php'
});
return false;
});
/* Form 2 */
$('#frmResults').live('submit', function() {
$(this).ajaxSubmit({
target: '#divLookup',
url: 'lookup_div.php',
});
return false;
});
});
ここまでは順調ですね。各フォームはajaxを使用して何度も送信でき、すべてのバインディングは1つの送信から次の送信まで存続します。
この問題は、3番目のフォームをバインドし、2番目のフォームの「成功」オプションでその送信イベントを発生させようとすると発生します。
/* Form 2 */
$('#frmResults').live('submit', function() {
$(this).ajaxSubmit({
target: '#divLookup',
url: 'lookup_div.php',
success: function(responseText){
$('#frmLookup').submit();
}
});
return false;
});
/* Form 3 */
$('#frmLookup').live('submit', function() {
$(this).ajaxSubmit({
target: '#divMappings',
url: 'mapped_items_div.php',
});
return false;
});
これを行うと、ajaxSubmitは正常に実行されますが、フォームのデフォルトの送信も実行され、ページがリロードされます。「returnfalse」が含まれていることに注意してください。フォームのデフォルトの送信を抑制しますが、何らかの理由でとにかく送信します。
フォーム3の「ライブ」と同じオプションを使用してフォーム2の成功関数でフォーム3の「送信」イベントに「バインド」すると、フォームのデフォルトの送信は実行されないことがわかりました。ただし、これは冗長であり、可能であれば、それを避けたいと思います。
フォーム3のデフォルトの送信動作を抑制するにはどうすればよいですか?