2012-07-01 89 views
0

我有一個form.edit_recipe,我的目標是讓這個表單在頁面卸載之前成功保存(如果有新數據的話),而不需要用戶提示。jquery beforeunload submit form

這是JQ的關鍵位:

$(document).ready(function() { 
     $(window).bind('beforeunload', function() { 
     if (auto_save_timer) { // auto_save_timer == true means there are changes 
      $("#auto_save_overlay").css('display', 'block'); // shows a spinner 
      $(".edit_recipe").submit(); 
     } 
     }); 
    }); 

在點擊一個鏈接到下一個頁面,有時更改保存,有時他們不這樣做,即使是在相同的情況和數據集。

我99%確定我的其他變量和頁面上的JQ沒有影響到這一點,但如果需要的話,我可以更多地使用更多代碼示例。

我迷路了或者是什麼問題,但是我覺得這與表單數據被下一頁加載中斷有關。

有什麼建議嗎?編輯: 感謝您的建議,迄今爲止。我想我應該聽取@ see163的建議,也許考慮強迫用戶手動按保存按鈕,如果有未保存的更改,只需添加一個alert()。這是一種更正統的方法嗎?如果.beforeunload在Opera和Chrome中是垃圾,我應該使用哪些JQuery事件/操作來跨瀏覽器友好?

+0

嘗試的.css之前調用.submit()() – maxhud

+0

@maxhud謝謝你的建議,切換'.css'和'.submit'似乎可以提高這個速度,但它仍然無法保存更改。我希望「正確」的方式來做到這一點,而不是爲我的便便擦亮。 – RickyD

回答

1

有時候unload和beforeunload在opera中並不總是有效。

要小心。

+1

不應該這是一個評論?這不會解決問題。 – 11684

+0

這是重要的評論 – see613

+0

我認爲任何解決這個問題都不是跨瀏覽器的。 – see613

0

各個環節,你可以這樣做:

<a href="javascript:submitForm('URL HERE')">............</a> 

,然後在JS做:

function submitForm(url){ 
     if (auto_save_timer) { 
        $("#auto_save_overlay").css('display', 'block'); 
          $(".edit_recipe").submit(); 
      window.location = url; 
        } 
    }