2013-04-20 20 views
3

我正在開發一個具有DNS記錄管理器的虛擬主機面板。我必須使用大量JavaScript才能使其表現幾乎像桌面應用程序一樣。在某些鏈接上禁用瀏覽器onUnload?

我真的想在瀏覽器運行時顯示一個自定義對話窗口beforeunload但是經過一些研究後,我發現我被瀏覽器的默認對話窗口卡住了。

因此,下面的這段JavaScript代碼就是這麼做的,我的問題是我需要確保它不會在某些鏈接點擊時被解僱。

我希望能夠維護一個CSS類名的數組,如果點擊的鏈接在這個數組中,那麼它將不會顯示onunload事件。

我相信這對於JavaScript開發人員來說很簡單。有人可以告訴我如何做到這一點?

//sample Class array 
safeLinks = ['test', 'test2', 'test3', 'test4', 'test5']; 

// onunload event 
$(window).on('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

回答

2

你可以刪除的事件處理程序正在單擊時:

var safeLinks = ['.test', '.test2', '.test3', '.test4', '.test5']; 

function promptBeforeClose() { 
    return 'Are you sure you want to leave?'; 
} 

$(window).on('beforeunload', promptBeforeClose); 

$(document).on('click', safeLinks.join(', '), function(e) { 
    $(window).off('beforeunload', promptBeforeClose); 
}); 

而且,如果這些安全鏈接有一個共同的祖先,那麼使用該代替document作爲代表團的父母或人們會抱怨。 ;)

+0

我的腳本有問題。我有一個人們可以編輯一些照片的頁面。人們也可以刪除照片,並在他們按下時刪除確認內容。我在'safeLinks'上添加了該按鈕。直到有人點擊刪除,您的腳本完美無缺。如果他們取消確認,您的腳本將停止工作。我怎樣才能解決這個問題?每次有人點擊刪除並取消刪除確認時,我需要將'beforeunload'設置爲'off'。 – sorinu26 2014-01-11 21:39:29

+1

@ sorinu26:您可以取消該事件的冒泡。 'e.stopPropagation();'在確認監聽器中。 – Ryan 2014-01-11 22:33:48

+0

作品!謝謝! – sorinu26 2014-01-11 23:31:26

1

使用標誌variable.When曾經點擊onload事件,然後讓它爲真

$(window).on('beforeunload', function(){ 
if(flag != false) 
    return 'Are you sure you want to leave?'; 
}); 
+0

@jasondavis它是爲你工作 – PSR 2013-04-20 03:59:08

相關問題