2012-01-16 21 views
2

JQueryを使用して、ページを再ロードせずにフォームを送信しようとしています。これはスタンドアロンページのjQueryフォームプラグインでうまく動作しますが、AJAXで読み込んだページで動作する必要があります。jQuery - AJAXを使用して別のページからロードされた投稿フォーム

<script type="text/javascript"> 
    $('#LoadForm').click(function() { 
    $('#formDiv1').load('FormGen.asp'); 
    }); 
</script> 

私は、ロードされたフォームの提出をクリックしかし、形だけのAJAXを提出するのではなく、ページを提出し、リフレッシュします。

<script type="text/javascript"> 
// wait for the DOM to be loaded 
$(document).ready(function() { 
    // bind 'myForm' and provide a simple callback function 
    $('#myForm').ajaxForm(function() { 
     alert("Thank you for your comment!"); 
    }); 
}); 
</script> 

私が呼び出すページにコードを挿入し、そのスタンドアロンを使用すると完璧に動作します。ただし、別のページからフォームをロードしようとしているときには機能しません。

あなたはAJAXによってロードされているものにバインドする on()メソッドを使用する必要が
+0

私はあなたの問題は$(ドキュメント).readyが動的にロードページに対して実行されることはありませんということだと思います。そのメソッドに含まれているコードをページの最後に追加できますが、イベントハンドラは必要ありません。 –

答えて

-1
+0

...イベントをバインドするには、ajax経由で追加された要素のプラグインインスタンスを初期化するためではありません。この答えはコンテンツが欠けているだけでなく、公開された問題を解決することができますか? –

2

すると、ページのロード(あなたはAJAXでロードするため)、要素#myFormはそうページではまだ存在しませんajaxForm()プラグインは初期化されていません。

ajaxコンテンツが正常に読み込まれたら、初期化する必要があります。

$('#formDiv1').load('FormGen.asp', function(data, status, xhr) { 

    // this is executed when the load has finished 
    $('#myForm').ajaxForm(function() { 
     alert("Thank you for your comment!"); 
    }); 

}); 
1

UPDATE:

eerrrr ...私の悪い、正しく読み取れませんでしたquesionそうするために、ロードが発生したときに実行される.load()メソッドのコールバックパラメータを使用します - Didier Ghysの答えがより適切と思われます。


click()は、「クリック」JavaScriptイベントにイベントハンドラをバインドします。スクリプトの実行時にバインディングが実行されます。

あなたはツアー形式をajaxで試しているので、フォームがロードされる前にclick()関数が呼び出されていると思います。したがって、バインディングはありません。

live() functionを使用してみてください:

$('#LoadForm').live("click", function() { 
    $('#formDiv1').load('FormGen.asp'); 
    }); 
関連する問題