2012-11-08 57 views
0

我遇到了一個警報函數的問題。只有在用戶按下後退按鈕時纔會關閉警報。問題是當用戶嘗試關閉頁面時也會顯示警報。有任何解決這個問題的方法嗎?這是代碼。我通過在任何點擊的鏈接上將布爾值設置爲true來完成這項工作,這會關閉警報。Alert Popup Problen

編輯:任何人抓到它,是一個引號缺失。那只是我在這裏編輯代碼並意外刪除了一個引號。這實際上不是一個問題,我在這裏的代碼中修復了它。

<script> 
var okayToLeave = false; 

window.onbeforeunload = function() { 
    if (!okayToLeave) { 
    return "By going back, you risk submitting your order twice." 
    } 
} 

function OkayToLeave() { 
    okayToLeave = true; 
} 
+0

這是一個百萬常見問題。修正你的表單提交 – mplungjan

+0

你是什麼意思? – TheChes44

+0

這個問題已經在包括這個問題在內的各種論壇上被詢問超過10萬次(只需在onbeforeunload上搜索此網站)。修正你的後端,所以它可以處理這個問題,而不是試圖破解你的前端來修補問題 – mplungjan

回答

4

存在以下行缺少「 :

return "By going back, you risk submitting your order twice."

編輯:

OkayToLeave方法應該定義onbeforeunload

所以不是設置值爲true,您應該考慮只添加該事件。

EDIT2:

這裏是一個代碼示例:

function NotOkayToLeave() { 
    window.onbeforeunload = function() { 
     return "By going back, you risk submitting your order twice."; 
    }; 
}; 

function OkayToLeave() { 
    window.onbeforeunload = null; 
}; 
+0

我同意語法關閉,但我認爲另一個問題是他/她需要一種方法來設置okayToLeave時沒有鏈接已被點擊,對不對? –

+0

對不起,這只是一個編輯問題,當我把代碼放在那裏。這裏沒有問題。馬特走在正確的軌道上。 – TheChes44

+0

是的,馬特,那是問題所在。我已經爲後退按鈕工作,但是當我嘗試關閉窗口時,警報出現,當它不應該。它應該只發生在後退按鈕上。 – TheChes44

1

我不知道決定是否卸載被關閉或後面的動作只是造成該事件的任何方式。然而,作爲替代解決方案,您可以使用哈希標記作爲緩衝區工作(假設您不能完全重定向到另一個頁面,這將是首選解決方案(除了設置會話值以防止重複提交))。

當他們到達頁面時,使用javascript更改哈希標記。然後,檢測哈希何時變回(後退按鈕)並拋出警報並添加哈希。

jquery hashChange插件是一種檢測變化的方法。

https://github.com/cowboy/jquery-hashchange

+0

如何我可以重定向到另一個頁面完全?你能告訴我一個關於如何做到這一點的好鏈接嗎? – TheChes44