我工作的ASP.NET 3.5的網站項目,並使用jQuery,如果他們修改了頁面提醒用戶,並試圖離開頁面,不保存,所以做這樣的事情:jQuery的自動回問題
var warning = "Please save changes you made.";
var isDirty = false;
$(document).ready(function()
{
$('input:text,input:checkbox,input:radio').bind('change', function()
{
isDirty = true;
$('input[type=submit]').bind('click', function(e)
{
isDirty = false;
});
window.onbeforeunload = function()
{
if (isDirty)
{
return warning;
}
}
});
});
它工作正常,但是當我在頁面上進行更改,然後在頁面上的下拉列表中選擇另一個項目(導致回發)時,我收到了警告,我不應該這樣做。在jQuery中實現此功能是可行的,即在真正離開頁面時發出警告,但忽略回傳,以及在這種情況下需要對腳本進行哪些更改?
好吧,我修改劇本咯,創建了一個隱藏字段保存回發之間的骯髒狀態,所以它看起來是這樣的:
var warn_on_unload = "Leaving this page will cause any unsaved data to be lost.";
var previouslyDirty = false;
var isDirty = false;
$(window).load(function()
{
previouslyDirty = $('#dirtyFlag').val() == '1';
});
$(window).unload(function()
{
$('#dirtyFlag').val(previouslyDirty ? '1' : '0');
});
$(document).ready(function()
{
$('input:checkbox,input:radio').one('change', function()
{
isDirty = true;
previouslyDirty = true;
});
$('input:text, textarea').keydown(function()
{
isDirty = true;
previouslyDirty = true;
});
$('form').submit(function(e)
{
isDirty = false;
previouslyDirty = false;
});
$('select').bind('change', function(e)
{
isDirty = false;
previouslyDirty = true;
});
window.onbeforeunload = function()
{
if (isDirty || previouslyDirty)
{
return warn_on_unload;
}
}
});
未提交回發後,仍然表現不正確,它應該讓他們無一個警告,但保存骯髒的狀態,所以如果我改變下拉,回發沒有問題,但如果我嘗試離開頁面後,應該得到一個警告。另外,需要注意提交回發,即保存按鈕,顯然允許它們並清除先前設置的所有髒標誌。
我可能是啞巴,但實際上提到的下拉菜單是做什麼的? – 2010-02-06 19:00:46
@亞當。該特定的下拉菜單會更改外鍵值。但是這是一個更廣泛的問題,因爲我有各種不提交的按鈕,下拉菜單,嚮導按鈕等引起回發,並且只有當用戶離開頁面時,我才能對其中的任何人發出警告。 – Victor 2010-02-06 19:54:53
那麼,這並不是特別的「答案」,更像想法:導航到其他網站或關閉一個頁面必須有不同的「代碼」,然後改變一些東西的值,所以雖然都調用卸載,但一定有不同的東西。 ..檢查與螢火蟲也許? – 2010-02-06 23:12:13