ここで注意しなければならない重要な概念があります。特定のイベントが発生したときに実行されるイベントハンドラー関数を追加すると、イベントハンドラー関数の値はreturn
実際にはどこにも行かず、何にも渡されません。イベントリスナーは、将来の未知の時点でイベントハンドラー関数を呼び出すために作成されますが、通常のスクリプト実行は完全に線形であり、スクリプト内のコマンドの順序で実行されます。したがって、アプリケーションの機能をある方法で定義するのが最善です。特定のイベントが発生した場合にのみ、このような特定のアクションを実行すること。
上記の質問のように、フォームが最初に送信されたときにリッスンする1つのイベントハンドラーを定義しているので、それをすべてを開始する最初のイベントと見なします。あなたが説明する提出プロセスを私がどのように処理するかを次に示します。
//wrap the form element in jQuery and cache it so we don't work to re-select it
var $myform = $('#myform');
//specify that we are listening for -when- the form is submit
$myform.on('submit', function(event){
//prevents the form from actually submitting when submit is first clicked
event.preventDefault();
//Simpler image construction
var image = new Image();
document.body.appendChild(image);
//remember to listen for the image's load event before assigning a source
$(image).on('load', function(){
//this function is invoked in the future,
//when the image load event has been fired
//this bit actually submits the form via GET or POST
$myform.submit();
});
//an image's `src` attribute can be set directly via the`src` property
image.src = "http://placekitten.com/320/240";
});
JSFiddleでのこの作業の例:
http://jsfiddle.net/Admiral/uweLe/
jQueryの.on()
メソッドを読んで、現在推奨されているイベントバインディングのメソッドについての洞察を得ることをお勧めします。これにより、状況が少し明確になるはずです。
http://api.jquery.com/on/
幸運を!