2009-08-20 4 views
1

私はJavascriptとonbeforeunload?

<span class="cssButton"><a href="javascript:void(0);" class="buttonBlue" onclick="swfu.startUpload();"> <img src="http://uber-upload.com/img/icons/up_16.png" alt=""/> Uber-Upload! </a></span>

持っていると私はそれを作りたいので、あなたはボタンが、それはまた、あなたがページを離れるしようとすると、それが1をポップアップ表示されますようにそれを作る変数を設定することを押すと、アップロード中に人が誤って立ち去るのを防ぐため、「このページを残してよろしいですか?」というアラートが表示されます。

アップロードが終了した後に変数を設定しないことについて心配しないでください、私はそれを追加します、私はちょうどあなたの1人のスマートコーダーが私にフレームワークを作る必要があります。

ありがとうございます!

答えて

1

ページに、この宣言を追加します。

var upcount = 0; 
にあなたのonclickを変更

swfuはあなたにそれをアップロードして行うのイベントのいくつかの種類を与える場合は、その上にこれを入れ、

onclick="++upcount; swfu.startUpload();" 

--upcount; 

このハンドラを追加してください:

window.onbeforeunload = function() { 
    if (upcount > 0) { 
     return "The upload is still in progress, leaving the page will cancel it."; 
    } 
} 

ブラウザがonbeforeunloadを尊重しているところでは、それはうまくいくでしょう。そしてほとんどの人は、ほとんどの場合、そうしています。彼らがいないところでは、まあ、あなたは試みました。カウンタを使用することで、複数のアップロードを許可することに注意してください。

attachEvent(IE)またはaddEventListener(標準)(または、PrototypeやjQueryのような違いがあると思われるライブラリ)を使用して、属性を使用するのではなくイベントを添付することもできます。属性(DOM0ハンドラともいう)を使用するのは、かなり古いもので、少し制限があります(要素ごとにイベントごとに1つのハンドラのみ)。しかし、それはまだ動作します。

+0

ありがとう、他の人のコードよりもきれいです。 – jiexi

+0

乾杯。 * cleaner *についてはわかりませんが、もう一方は十分にきれいでしたが、これは追加の1つのケース(倍数)を処理します。 –

0

前回のロードに依存することは、最高でスケッチです。スパム発信者は同じように行動を乱用しているため、これを行うための人々の能力を示唆しています。

ボタンのアクティブ化などでcloseイベントが発生した場合のみ、onbeforeunloadに応答することができます。

+0

ボタンを設定する方法はありません。$ uploading = true window.onbeforeunload = confirmExit; function confirmExit() { if($ uploading = true){ 返信 "アップロード中に離れるとファイルが失われます。このページを終了してもよろしいですか? }} ちょうどそのようなもの – jiexi

+0

GMail、SO、...のために十分にうまくいくようです –

+0

あなたの最後の声明は真実ではありません。 AFAIK(そして私はIE6,7、FF2と3の間でこれをテストしました)onbeforeunloadはページを出るときはいつでも起動します。 –

1
function warnUser() 
{ 
    if(dataIsDirty) 
    { 
     return "You have made changes. They will be lost if you continue."; 
    } 
    else 
    { 
     // Reset the flag to its default value. 
     dataIsDirty = false; 
    } 
} 

function isDirty() 
{ 
    dataIsDirty = true; 
} 

function isClean() 
{ 
    dataIsDirty = false; 
} 

次に、onbeforeunloadイベントのように使用します。

window.onbeforeunload = warnUser; 
dataIsDirty = false; //Or true, depending on if you want it to show up even if they dont' make changes) 

次にあなたが(例えば、保存)それをトリガーにしたくない、またはあなたが添付できるだけで何にも「isClean」関数を使用し、それを使用するには「isDirty」あなたがトリガーしたい任意のイベントに(フォームフィールドの編集など)前に

+1

ええと、既にfalseのときにdataIsDirtyをfalseに設定しているのはなぜですか? –

+0

ほとんどの場合、これは動作します。ありがとう – jiexi

+0

ページの最初の読み込み時に、ページから離れる場合は、そのフラグを設定する必要はありません。彼らはあなたが何かを変更する場合にのみそれが設定されてほしい。したがって、デフォルトではfalseに設定する必要があります。彼らが何かを変更するとtrueに設定され、「保存」をクリックするとfalseにリセットされます。それが理由です。 –

関連する問題