2012-08-13 16 views
0

我正在創建一個簡單的函數,用於在用戶即將關閉網頁時發出警告。我正在使用window.onbeforeonload函數是javascript。我正在做的是,我設置一個變量爲false,因爲邪惡的window.onbeforeonload函數。從htm內設置js函數的變量

function funky() { 
var submitFormOkay = false; 
window.onbeforeunload = function() { 
    if (submitFormOkay == false) { 
     return "You are about to leave this order form. You will lose any information..."; 
    } 
} 
} 

在我的HTML,這是我在做什麼

<input type="submit" id="submit_button" onclick="submitFormOkay = true;"> 

我的問題是不過,我需要一種方法來觸發功能時髦的()。 我知道我可以使用onclick,但是如果我要做什麼來設置submitFormOkay的值。

任何幫助,將不勝感激。

回答

2

爲什麼不讓submitFormOkay成爲函數funky的一個參數,而只是用給定的參數調用它呢?

<input type="submit" id="submit_button" onclick="funky(true);"> 

而在JS文件:

function funky(submitFormOkay) { 
    window.onbeforeunload = function() { 
     if (submitFormOkay == false) { 
      return "You are about to leave this order form. You will lose any information..."; 
     } 
    } 
} 
+0

但是'var submitFormOkay = false;'需要在'funky'函數之外,否則它會覆蓋 – Ibu 2012-08-13 19:06:02

+0

我在想那個,但不知道它是否會起作用。謝謝,我會試一試。 – tawheed 2012-08-13 19:08:06

+0

@tawheed您當然可以通過'onclick'將參數傳遞給您的函數。我不知道你爲什麼需要*,但我不知道還有什麼叫「時髦」。 – 2012-08-13 19:12:37

0

不改變你的HTML,我應該這樣做,而不是:

window.onbeforeunload = (function(w) { 
    w.submitFormOkay = false; 
    return function() { 
     if (!w.submitFormOkay) { 
      return "You are about to leave this order form. You will lose any information..."; 
     } 
    }; 
})(window); 

與ngmiceli的解決方案的一個問題是window.onbeforeunload的回調永遠不會被定義,直到用戶可以離開頁面。

+0

那麼我通過html傳遞的'w'值是什麼?這是我想要設定的價值嗎?例如true或false – tawheed 2012-08-13 19:21:02

+0

我同意這樣的*可能是一個問題,但它存在於OP提供的代碼中。我只是在回答問題的同時試圖保留給定的結構,假設OP有這樣做的理由 – 2012-08-13 19:22:43

+0

@tawhead不要擔心。這只是使'submitFormOkay'成爲全局的窗口對象。您不需要更改HTML中的任何內容。 – 2012-08-13 19:23:29