2013-07-11 25 views
0

如果用戶試圖關閉在登頂時激活的窗口,則使用「beforeunload」警告進行文件上傳時使用「PECL uploadprogress」狀態。尋找表單文件傳輸完成事件! jquery ajax

$('#form').click(function() { 
    $('#upload').submit(); 
    ajaxd();  
    setInterval("ajaxd()",1000); 

    (...) 

    $(window).bind("beforeunload", function() { 
    /* return true || confirm("Do you really want to close?"); */ 
     return confirm("Do you really want to close?"); 
    }); 
} 

function ajaxd() { 
$.ajax({ 
    dataType: "json", 
    (...) // get and workaround progress for upload-bar 
    }); 
} 

現在,我需要解除綁定 「beforeunload」 的地方......

$(window).unbind(); 

...但在哪裏? $ .ajax({})。done或.complete在這裏不起作用,因爲函數正在重複。另外.ajaxStop。我需要在「文件傳輸完成」事件,以解除綁定。我可以使用像

if $progress_percent > 90 { unbind() } 

(當文件傳輸完成後,形式追隨目標(動作)。該頁面將關閉。大概之前腳本得到了100%。用戶在此卸載得到一個警告。這就是我試圖通過使用> 90而不是== 100來避免)。

但我不喜歡這種方式。有更好的解決方案嗎?

+0

$(「form」)。click? –

+0

不是取消綁定beforeunload,將百分比完成存儲在gobal變量中,並將其默認爲100%,然後當事件發生時,測試百分比是否爲您的值,並返回一個字符串或不包含任何內容(不返回true ;',只是'返回;') –

+0

@kevin,真正我在這裏使用ID。 $( '#form_submit_button')。只是想讓它變得可以理解。 如果文件傳輸完成,表單將跟隨目標。該頁面將關閉。可能在腳本獲得100%之前。在這種情況下,用戶會收到警告。這是我儘量避免的。 – Tom

回答

0

如果您使用過PHP sessions,那麼在$_SESSION["upload_progress_xxx"]["done"]爲true或檢測到上傳錯誤的情況下,JavaScript事件將被解除綁定。