Javascriptとonbeforeunload?
-
19-09-2019 - |
質問
私が持っている
<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スマートコーダーを必要とする、ことを追加します。
ありがとうございます。
解決
ページに、この宣言を追加します:
var upcount = 0;
にあなたのonclickを変更
onclick="++upcount; swfu.startUpload();"
swfu
はあなたのイベントのいくつかの種類を与える場合は、それがアップロード完了だとき、それの上にこれを入れます:
--upcount;
そして、このハンドラを追加します:
window.onbeforeunload = function() {
if (upcount > 0) {
return "The upload is still in progress, leaving the page will cancel it.";
}
}
ブラウザはonbeforeunloadを尊重ここで、、それは動作します。そして、それらのほとんどは、ほとんどの時間を行います。そうでない場合は、よく、あなたは試してみました。カウンタを使用することによって、あなたは複数のアップロードを可能にしていることに注意してください。
あなたはあなたのイベントを取り付けるのではなく、属性を使用するためのattachEvent(IE)またはのaddEventListener(標準)(またはあなたのための違いをならしプロトタイプやjQueryのようなライブラリを)検討するかもしれません。属性(別名DOM0ハンドラ)を使用すると、かなり旧式であり、ビット(要素ごとのイベントごとに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」は任意のイベントにあなたは彼らが去る前にそれをトリガーにしたいです(たとえば、フォームフィールドを編集する)。
onbeforeunloadに頼って最高の状態で不完全です。スパマーは、あなたが、これは基本的に削除されている実行する人々のための能力を示唆しているのと同じ方法で行動を虐待してきたので。
あなたは今だけクローズイベントがボタンまたは、そのようなを活性化から解雇された場合onbeforeunloadに応答することができます。