2012-04-28 60 views
0

接受我有這樣的代碼:如何防止離開頁面,直到答案從jQuery UI的對話框

$(window).bind('beforeunload', function() { 

     $("#dialogsendnotifications").dialog('open'); 
    }); 

    $("#dialogsendnotifications").dialog({ 

     autoOpen: false, 
     closeOnEscape: false, 
     buttons: { 
      "Yes": function() { 
       $(this).dialog('close'); 
      }, 
      "No": function() { 
       $(this).dialog('close'); 
      } 
     } 
    }); 

所以基本上它的作用是當用戶嘗試導航離開它彈出的是沒有對話。問題在於對話框出現,但在用戶甚至選擇按鈕之前,它會從頁面導航。

有人能告訴我如何讓它等到用戶選擇了答案嗎?

+0

我強烈反對這個建議。這是一個非常糟糕的用戶體驗,幾乎任何合法的業務需求都能以更好的方式實現。例如,通過某種臨時保存(可能是自動保存草稿)功能可以更好地避免通過導航導致的意外數據丟失。如果他們失去聯繫會怎麼樣? – 2012-04-28 09:38:24

回答

3

你不能。 onbeforeunload事件非常非常嚴格。你所能做的只是返回一個字符串,瀏覽器將在其自己的對話框中使用。你根本無法做任何事。

下面是一個例子:Live copy | source

jQuery(function($) { 

    $(window).bind("beforeunload", function(event) { 
    return "This is the message you're allowed to provide"; 
    }); 

}); 
-1

返回假以阻止行動就像這樣:

$(window).bind('beforeunload', function() { 
    $("#dialogsendnotifications").dialog('open'); 
    return false; 
}); 
+0

'onbeforeunload'不像其他事件。 'return false'對'onbeforeunload'沒有影響,除了讓瀏覽器顯示「真的離開這個頁面?」對話框中包含「false」字樣。 – 2012-04-28 09:23:46

+0

這很有趣。你可以說event.preventDefault()來阻止它嗎? – robrich 2012-04-28 17:08:09

+0

@ robrich:再一次,'onbeforeunload'是特殊的。如果你看看jQuery文檔,你會發現'return false'意味着'event.preventDefault();'與'event.stopPropagation();'結合在一起。所以不,'event.preventDefault();'不會幫助。 – 2012-04-28 22:22:31

0

謝謝你們。對我來說,這有助於:

$(window).on('beforeunload', function(){ 
return ''; 
}) 

但在我的例子,我有我的「beforeunload」 - 函數內環路(.each())。然後不要忘記退出循環之前,你想返回一個值;)

相關問題