2013-05-01 14 views
33

次のコードは、ページ上のデータを変更してページを終了すると警告を実行します。私はそれが欲しい - ユーザーが保存ボタンを押したときを除いて。保存ボタンをクリックせずにページを離れる場合はjquery警告

これはjqueryのコードです:

$(document).ready(function() { 
    formmodified=0; 
    $('form *').change(function(){ 
     formmodified=1; 
    }); 
    window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     if (formmodified == 1) { 
      return "New information not saved. Do you wish to leave the page?"; 
     } 
    } 
}); 

これは、データを保存ボタンです:

<input class="btn-primary" name="commit" type="submit" value="Save Material"> 

UPDATE おかげtymeJV !!!!!!!あなたはformmodified

$("input[name='commit']").click(function() { 
    formmodified = 0; 
}); 

あなたのチェックの値を設定することができ

<input class="btn-primary" name="commit" type="submit" value="Save Material"> 

:あなたのボタン情報を保存考えると

$(document).ready(function() { 
    formmodified=0; 
    $('form *').change(function(){ 
     formmodified=1; 
    }); 
    window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     if (formmodified == 1) { 
      return "New information not saved. Do you wish to leave the page?"; 
     } 
    } 
    $("input[name='commit']").click(function() { 
     formmodified = 0; 
    }); 
}); 
+2

?そして渡されませんか?その場合は、Saveボタンのonclickを0に設定するか、フォームのサブミットをオンにします。 – MasNotsram

+0

わかりません。保存ボタンをクリックすると情報が保存されないという警告が表示されます。 –

+0

@ColinBacon彼は、保存ボタンをクリックすると、最後に保存に関する警告を表示しないようにしたいと思います。 – tymeJV

答えて

19

:他のケースの誰かに

はこの作品、それを必要とします最後に今すぐ起動しないでください

+0

助けてくれてありがとう! – Reddirt

+0

魅力的な作品です。そして、実際には最後の行は必要ありません。「あなたはページを残してもよろしいですか?」これはブラウザの(少なくともChromeの)確認のプロンプトに不可欠であるように見えます。 – cbmtrx

+0

うーん、私はあまりにも早く話をしたかもしれない、@ tymeJV。 Chrome上では、少なくともwindow.onbeforeunloadが 'input.commit'ボタンのクリックが登録される前に' confirmExit() '関数を呼び出しているようです。したがって、フォーム提出時にもアラートがポップされます。 – cbmtrx

6
$('#form').data('serialize',$('#form').serialize()); // On load save form current state 

$(window).bind('beforeunload', function(e){ 
    if($('#form').serialize()!=$('#form').data('serialize'))return true; 
    else e=null; // i.e; if form state change show box not. 
}); 

Google JQueryフォームシリアライズ機能を使用すると、すべてのフォーム入力を収集して配列に保存できます。私はこの説明が十分だと思います:)

+0

解決策の説明が役立ちますが、それ以上に収益を得ることができます。 – suspectus

+0

あなたの提案に感謝しました。 –

3

これは正確な答えではありませんが、問題の解決策を探している人のために、私がそうだったのと同じように、 jQueryプラグインAreYouSureをお勧めします。 この非常に軽量なプラグインは、復帰したフォームの変更、フォームのリセットボタンのクリック、フォームフィールドの追加/削除など、すべてのナットと太字を処理します。

0

あなたは、リンクがクリックされたときに残してからページを防ぐためにしたい場合は、あなたがbeforeunloadイベントに結合し、中に電子を渡すことができます。ちょうどページの期間中に使用する「formmodified」です

$(document).ready(function() { 
    var modified = false; 
    $(window).bind('beforeunload', function(e){ 
     if (modified) { 
      $.confirm({ 
       'title' : 'Did You Save Your Changes?', 
       'message' : 'It seems as if you have made changes but didn\'t click Save.\nAre you sure you want to leave the page?', 
       'buttons' : { 
        'OK' : { 
         'class' : 'gray', 
         'action': function(){} // Nothing to do in this case. This can be omitted if you prefer. 
        } 
       }) 
      } 
      e.preventDefault(); 
     } 
    }); 
});  
+0

私のためにはうまくいかない:リンクをクリックするか、ブラウザでリロードを押すだけで、ページを開く/リロードする。 – Fabien

+1

From https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload: "2011年5月25日以降、HTML5仕様では、window.alert()、window.confirm() )、window.prompt()メソッドはこのイベント中に無視される可能性があります。詳細については、HTML5仕様を参照してください。 – dieend

関連する問題