2010-06-28 61 views
0

我在網頁上有一個表單,當用戶從該頁面移動時,我想檢查表單是否已提交。如果是,那麼用戶只是繼續到下一頁,如果沒有,用戶收到警報消息並返回到表單所在的原始頁面。onunload - 檢查表單是否已提交

我對JavaScript不太熟悉,所以如果可能的話,我將不勝感激一些代碼片段?

GF

回答

1

您的問題有點含糊。你的問題意味着你在異步提交表單,但是你說你不熟悉JavaScript。異步提交表單需要JS知識。另外,如果你真的實際上是同步提交表單,解決方案太明顯了(只是在服務器端有條件地渲染一些JS)。

如果您實際上是異步提交表單,那麼只需在成功提交表單後設置一些表單的data-xxx屬性即可。例如。

function submit(form) { 
    // Do your thing to submit it. 

    // And then on succes: 
    form['data-submitted'] = true; 
    return false; 
} 

然後,在beforeunload事件你剛纔檢查令牌/切換是存在的,在它丟失情況下,返回相應的消息。

window.onbeforeunload = function() { 
    for (var i = 0; i < document.forms.length; i++) { 
     var form = document.forms[i]; 
     if (form['data-submitted'] != 'undefined' && !form['data-submitted']) { 
      return "There is unsaved data!"; 
     } 
    } 
} 

請注意,您不能使用unload事件這一點,因爲它爲時已晚,以保持頁面打開。


更新:這樣的形式同步提交。好的,無論您使用的是哪種服務器端語言,只要讓它在未提交表單時有條件地呈現JS window.onbeforeunload調用(您顯然已知道表單何時提交,您還能如何處理它);) )。表單即將提交時,您還需要禁用window.onbeforeunload調用。

根據您的問題記錄我敢打賭,你知道PHP的,所以這裏是一個PHP針對性開球例如:

<?php 
    if (!$form_is_submitted) { 
     echo '<script>window.onbeforeunload = function() { return "There is unsaved data!"; }</script>'; 
     echo '<form onsubmit="window.onbeforeunload=null">'; 
    } 
?> 
+0

嗨, 感謝您的回答。實際上,表單將同步提交。因此,我想檢查表單確實已提交的「beforeunload」函數。如果它沒有任何反應,則不會將用戶帶回表單。 我希望這是明確的? GF – 2010-06-30 13:41:35

+0

不可能強迫他們留在同一頁面上。但是,可以顯示一條消息,詢問他們是否想留在同一頁面上,然後重點關注表單。 – Hello71 2010-07-15 21:04:03