2012-06-25 45 views
3

我有一個簡單的HTML表單,其中有幾個字段。如何防止「您確定要離開此頁面嗎?」提交表單提醒?

我想確保用戶在嘗試離開頁面時收到警告消息。所以我在頁面上添加了腳本,當用戶試圖離開這個頁面時,腳本就會運行。

但是,當用戶嘗試提交表單時,我也會收到此警報消息。當用戶保存表單時,我不想要此警報消息。

請幫忙。

下面是一些示例代碼。

<html> 
    <head> 

    <script> 
     function verifyexit() { return 'Are you sure ?'; }   window.onbeforeunload = verifyexit; 
    </script>  
</head> 
<body> 
     Go to <a href="b.html"> another page </a> 
     <form action="c.html"> 
      name : <input type="text" name="name" value=""/> <br> 
      email : <input type="text" name="email" value=""/> <br> 
      <input type="submit" value="save"/> 
     </form> 
</body> 

回答

6

stackoverflow reference

要打開它:

window.onbeforeunload = "Are you sure you want to leave?"; 

要關閉它:

window.onbeforeunload = null; 

記住,這不是一個正常的事件 - 你不能以標準的方式綁定它。

要檢查是否值?這取決於你的驗證框架。

在jQuery中,這可能是這樣的(非常簡單的例子):

$('input').change(function() { 
    if($(this).val() != "") 
     window.onbeforeunload = "Are you sure you want to leave?"; 
}); 

With JQuery這東西是很容易做到。既然你可以綁定來設置。

它不夠做onbeforeunload,你要只觸發導航路程,如果有人開始編輯東西。

要在Chrome和Safari這項工作,你將不得不做這樣的

window.onbeforeunload = function (e) { 
    e = e || window.event; 

    var msg = "Sure you want to leave?"; 

    // For IE and Firefox prior to version 4 
    if (e) { 
     e.returnValue = msg; 
    } 

    // For Safari 
    return msg; 
}; 


這是參考

window.onbeforeunload = function (e) { 
    e = e || window.event; 

    // For IE<8 and Firefox prior to version 4 
    if (e) { 
    e.returnValue = 'Any string'; 
    } 

    // For Chrome, Safari, IE8+ and Opera 12+ 
    return 'Any string'; 
}; 

reference: https://developer.mozilla.org/en/DOM/window.onbeforeunload的一般規則

+1

'你不能以標準方式綁定它請澄清。 –

1

試試這個:

<form action="c.html" onsubmit="window.onbeforeunload=function(){}"> 
+0

對不起,但它不工作。 – ashishjmeshram

+0

JSF概念驗證:http://jsfiddle.net/z5pQJ/適用於我。 –

+0

他在他的問題中表示,他希望onbeforeunload在所有情況下執行,除非表單正在提交,所以這符合他的規範。 –

0

試試這個:http://cfsilence.com/blog/client/index.cfm/2009/10/12/jQuery-Method-To-Prompt-A-User-To-Save-Changes-Before-Leaving-Page

我添加了另一個位功能:

$('#submitButton').click(function() { 
     isDirty = false; 
}); 

正是這樣的形式時,要提交不進行驗證問它:)

我希望這可以幫助

注意:如果你不喜歡依賴通用命名(否則你的提交按鈕需要被稱爲submitButton),你也可以做類似$(「input [type = submit]」)的東西

1

試試這個:

$(window).bind("beforeUnload", verify); 
$("form").submit(function(){ 
    $(window).unbind("beforeUnload"); 
};