2012-04-28 11 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

私はこれに対して強くお勧めします。これは本当に悪いユーザーエクスペリエンスであり、合法的なビジネスニーズはほとんどが別の方法で実装するほうが優れています。例えば、遠隔操作による偶発的なデータ消失を回避するには、ある種の暫定保存(おそらく自動保存草案)機能が役立ちます。彼らは彼らの接続を失う場合はどう? –

答えて

3

あなたがすることはできません。 onbeforeunloadイベントは非常に制限的です。あなたができることは、ブラウザがそれ自身のダイアログで使用する文字列を返すことだけです。あなたは何もすばらしくすることはできません。

ここに例を示します。Live copy | source

jQuery(function($) { 

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

}); 
-1

そうのような作用をブロックする場合はfalse戻り値:

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

'onbeforeunload'は他のイベントと異なります。 'return false'は' onbeforeunload'には何の影響も与えません。その中に「偽」という単語を含むダイアログが表示されます。 –

+0

それは面白いです。それを停止するにはevent.preventDefault()と言うことができますか? – robrich

+0

@ robrich:もう一度、 'onbeforeunload'は特別です。 jQueryのドキュメントを見ると、 'return false'は' event.preventDefault(); 'と' event.stopPropagation(); 'の組み合わせを意味するだけです。だから、 'event.preventDefault();'は役に立ちません。 –

0

君たちをありがとうございます。私にとっては、このことができます:

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

しかし、私の例では、私は私の "beforeunload" -function内部ループ(.each())を持っています。値を返す前にループを終了することを忘れないでください;)

関連する問題