1

ここでの非常に一般的なシナリオは、ユーザーがフォームのフィールドを変更し、保存せずにページを離れることです。警告メッセージを投げます。

私は最初に使用することから始めました

$(window).bind("beforeunload", function(){ });

しかし、ダイアログをスローしてユーザーにいくつかのオプションを提供したいので、代わりにこれを選択しました。

$("#myForm").change( function(){
    $("a:not(:#myForm a)").click( function(){
    $("#promptDialog").dialog("open");
        return false;
    });
});

これが正確に機能しない唯一のシナリオは、ユーザーがフィールドを変更してから元の値に戻した場合です (プロンプトは表示されませんが、表示されます)。

このソリューションはエレガントですか?これを行うためのより良い方法はありますか?

4

2 に答える 2

1

残念ながら、onbeforeunload-part を置き換えるのは難しいです。リンクをクリックする以外にもページを離れる方法はまだありますが、それらすべてを傍受することはできません。

しかし、change-event の問題は、より良い方法で処理できます。

DOMready では、フォームのデータ内など、フォームの初期値をどこかに保存します。

アンロード前に、保存された値と現在の値を比較して、変更があったかどうかを判断できます。

jQuery(
  function($)
  {

    $('#myForm').data('defaultValues',$('#myForm').serialize());

    $(window)
      .on('beforeunload',
          function()
          {
            if($('#myForm').data('defaultValues')!=$('#myForm').serialize())
            {
              return 'are you sure?';
            }
          });
  }
);
于 2012-10-27T00:01:27.283 に答える
0

ブラウザーの実装機能をオーバーライドすることはできません。カスタム ダイアログの標準アラート (実装定義の構成要素) を交換する必要がありますが、これは関数では実行できませんonbeforeunload。後者のソリューションは、代わりに十分なはずです。

于 2012-10-26T23:23:37.897 に答える