2009-06-11 4 views
9

ユーザーがフォーム上で送信をクリックした後、読み込み中のGIFを表示しようとしています。提出ボタンをクリックした後にgifを表示しますか?

私はそれがどのように行われたかを示す良いチュートリアルを探しています。

私は途中でGIFを取得できませんが、十分なチュートリアルを知っているか、スクリプトでこれを完了する必要があります。

+0

お願いします。 –

答えて

3

あなたは、送信の直後にgif(myImg.src = myImg.src;)をリロードするためにsetTimeoutを使用します。

function wait_animation() 
{ 
    var myMsg = "Sending form data to server... Please Wait..."; 
    window.status = myMsg; 
    msg("<img name='wait' src='/all/images/wait.gif' height=7 width=78> " + myMsg); 
} 

function long_wait_animation() 
{ 
    var myMsg = "Still sending... You are uploading large files and we have not yet received " + 
          "all the information. Unfortunately, Internet Explorer sometimes interprets " + 
          "this delay as a server error. If you receive a 'Timeout' or 'Site not found' " + 
          "error please click your 'Back' button and try sending less files."; 
    window.status = "Still sending ..."; 
    msg("<img name='wait' src='/all/images/wait.gif' height=7 width=78> " + myMsg); 
} 

// Generic onSubmit handler 
function form_on_submit(myForm) 
{ 
    form_check_lists(myForm); 
    if (form_errors.length != 0) { 
     err( 'There are some problems with the information you entered:' + 
        '<ul><li>' + form_errors.join('<li>')); 
     form_enable_submit(myForm); // re-enable submit (so user can retry) 
    } else { 
     hideLayer('err'); 
     window.status = "Uploading Data... Please Wait..."; 
     form_disable_submit(myForm); // function that prevents double-submissions 
     window.setTimeout("wait_animation()", 10);    // 1/100th 
sec (must happen after submit) 
     window.setTimeout("long_wait_animation()", 60*1000); // 60 secs 
     myForm.submit(); 
    } 
    // reset form errors 
    form_errors = new Array(); 
    return false; // false=don't submit (because we probably just submitted it). 
} 

上記のコードは、(MSG以外は基本的に同じことをやっている)、むしろ既存のGIFのソースを変更するよりも、アニメーションGIFを追加するinnerHTMLプロパティを使用しています。しかし、コンセプトは同じですが、提出後にgifをロードする必要があります。そうしないとIEは新しいスクリプトをブロックしないため、setTimeoutを使ってのみ行うことができます。

+0

+そのHocus Pocus私のためにThanx BTW –

18

これは本当に簡単です。あなたがイメージ、最初に隠されてい:

<img src="myloadingimage.gif" style="display: none;" id="loading_image"> 

をあなたは、AJAX要求を行います。

$('#loading_image').show(); // show loading image, as request is about to start 
$.ajax({ 
    url: '..', 
    type: '..', 
    complete: function() { 
     // request is complete, regardless of error or success, so hide image 
     $('#loading_image').hide(); 
    } 
}); 

それは私が約束し、ロケット科学ではありません。 :)

EDIT:これはjQueryを使用しています。あなたはjQueryタグを置くので、それは問題ないと思います。

私はあなたのオリジナルの質問に完全には言及していませんでした。これは、おそらく通常のフォームであるローディングバーを表示したいということです。フォームタグは「あるmyForm」のIDを持っている場合、これはそれを行う必要があります:あなたが提出クリックからユーザーを停止する場合は

$(':submit',this).attr('disabled','disabled'); 

$('#myform').submit(function() { 
    $('#loading_image').show(); // show animation 
    return true; // allow regular form submission 
}); 

また、このような行を投げることができ一回以上。これはまだサーバー側で検証する必要がありますが、それは防衛の面白い障壁です。

+0

これにはjQueryやPrototyoeなどが必要ですか?フォームIDはどういう意味で関数を参照するのですか? –

+0

Subbaの最初の手法と関連する手法は、AJAXを介したフォーム提出を要求します(技術的にはページを離れることはありません)。これはブラウザのナビゲーションを混乱させる可能性があり、あなたが望むものではないかもしれません。 2番目の手法はIE6では動作しません。また、IEはすべてのページのアニメーションやスクリプトを(前回のsetTimeoutでスケジュールされたものを除いて)停止するため、後で終了する可能性があります。私はこれがOPの意味であると仮定しています。「私は半分そこにはいるが、gifは十分に長くはない」。 「ホールド」とは、彼がアニメートを意味すると思う。 – SpliFF

3
**To set globally ajax options you need to do this** 

<img src="myloadingimage.gif" style="display: none;" id="loading"> 

$("#loading").bind("ajaxSend", function(){ 

    $(this).show(); 

}).bind("ajaxComplete", function(){ 

    $(this).hide(); 

}); 

すべてのAjaxはページ上で呼び出すには、「GIFは十分な長さのために保持していない」これらのデフォルト設定

0

を使うのでしょうか?問題はおそらくGIFが正しくループしないことです。 GIFをサポートするほとんどの画像エディタでループさせることができます。

関連する問題