簡體   English   中英

ASP.NET linkbutton兩次提高onBeforeUnload事件

[英]ASP.NET linkbutton raising onBeforeUnload event twice

我在這里發布了這個,但認為它本身可能值得一個問題。

我正在嘗試做的是顯示一個對話框,詢問用戶是否有未保存的更改時他/她是否要離開頁面。 一切正常。 但問題描述如下:

有沒有人遇到過Internet Explorer兩次觸發onb​​eforeunload事件的問題? 在谷歌搜索時,我發現它與(以及其他)ASP.NET鏈接按鈕的事實有關,HTML代碼是<a href="javascript: __doPostBack...

顯然,當IE鼓勵一個沒有href="#" ,它會觸發onb​​eforeunload事件。 然后,當您確認我們正在顯示的javascript對話框時,頁面將執行“真實”卸載以導航到另一個頁面,並再次引發onbeforeunload事件。

互聯網上提供的解決方案是設置一個布爾變量並在顯示對話框之前檢查它。 所以第二次,它不會顯示。 這一切都很好,但是當用戶取消時,仍然會設置變量。 因此,下次用戶想要離開頁面時,對話框將不再顯示。

希望這有點清楚,我希望有人找到解決辦法嗎?

對annakata的反應:是的,但您希望瀏覽器使用對話框的結果。 所以你可能會認為使用'return bFlag'可以做到這一點(或者event.returnValue = bFlag),但這會給你第二個對話框。 由於這個頁面 ,我找到了一條路。 實際上很簡單:

var onBeforeUnloadFired = false;

在這里使用此全局變量:

if (!onBeforeUnloadFired) {
    onBeforeUnloadFired = true;
    event.returnValue = "You'll lose changes!";
}
window.setTimeout("ResetOnBeforeUnloadFired()", 1000);

然后實現該功能:

function ResetOnBeforeUnloadFired() {
    onBeforeUnloadFired = false;
}

因此,實際上,使用標志,但如果用戶單擊取消,則重置它。 不完全是我想要的,但沒有找到更好的東西。

我沒有遇到過這個,但你肯定可以將flag變量設置為等於對話框的結果嗎? 如果用戶取消該標志將因此保持為假。

var bFlag = window.confirm('Do you want to leave this page?');

IE支持名為onstop的文檔對象上的事件。 此事件在onbeforeunload事件之后但在onunload事件之前觸發。 這與你的兩個對話框問題並不完全相關,但它仍然與可能偶然發現這個線程的其他人相關(正如我所做的那樣)。

我遇到的問題是,我需要在onbeforeunload事件觸發時顯示加載消息。 這一切都很好,直到頁面上有某種確認對話框。 即使用戶取消並且仍在頁面上,onbeforeunload事件也會觸發。 對我來說最簡單的事情就是將我的“加載”顯示邏輯移動到document.onstop的處理程序中。 除此之外,您還必須檢查文檔對象的readyState屬性,該屬性是另一個僅限IE的字段。 如果是“加載”,則表示用戶實際上正在離開頁面。 如果它“完整”,則表示用戶正在停留。

如果你只使用IE就可以了,那么你可能會對以下內容感興趣。

document.onstop = function() 
{
    try
    {
        if( document.readyState != "complete" )
        {
            showLoadingDiv();
        }
    }
    catch( error )
    {
        handleError( error );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM