2009-08-20 48 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

此聲明添加到頁面:當它完成上傳

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

如果swfu給你一些類型的事件,把這個就可以了:

var upcount = 0; 

您的onclick更改爲

--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處理程序)相當老式並且有點限制(每個元素每個事件只有一個處理程序)。但它仍然有效。

+0

謝謝,比其他人的代碼更清潔。 – jiexi 2009-08-20 20:45:34

+0

乾杯。我不知道* clean *,另一個足夠乾淨,但這確實可以處理另一個案例(倍數)。 – 2009-08-20 20:48:03

0

依靠onbeforeunload充其量只是粗略。由於垃圾郵件發送者濫用行爲的方式與您建議人們這樣做的能力已基本消除。

如果關閉事件是通過激活按鈕或類似事件觸發的,您現在只能對onbeforeunload做出響應。

+0

所以沒有辦法使按鈕設置$上傳=真 然後把東西像 window.onbeforeunload = confirmExit; 函數confirmExit() { if($ uploading = true){ return「如果你在上傳時離開,你的文件將會丟失,你確定要退出這個頁面嗎? }} 就像那樣 – jiexi 2009-08-20 20:27:45

+0

似乎對GMail來說工作得不錯,所以...... – 2009-08-20 20:29:01

+0

你最後的陳述是不真實的; AFAIK(我已經通過IE6,7和FF 2和3測試過),無論何時您通過任何方式離開頁面,都會觸發unload。 – 2009-08-20 20:33:54

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

嗯,爲什麼你設置dataIsDirty錯誤,當它已經是假的? – 2009-08-20 20:28:15

+0

大部分這將工作。謝謝 – jiexi 2009-08-20 20:31:20

+0

在初始加載頁面時,如果他們離開頁面,您不希望設置該標誌。你只希望它被設置,如果他們改變了一些東西。所以默認情況下,它應該是錯誤的。當他們改變某些東西時,它被設置爲true,當他們點擊「保存」時,它被重置爲false。這就是爲什麼。 – 2009-08-20 20:31:46