0

モデルを作成するフォームがあり、保存/作成ボタンをクリックしない限り、ユーザーがページから移動した場合にダイアログ ボックスが表示されるようにします。

ユーザーがページを離れるたびに機能するこのJavaScriptコードがあります。つまり、ユーザーが保存/作成をクリックすると、このダイアログが引き続き表示されます。

#javascripts/workouts.js.coffee
window.confirmExit = () ->
  "Your changes will not be saved.";

#workouts/new.html.haml
= render 'form'
:javascript
  window.onbeforeunload = confirmExit

#workouts_form.html.haml
= simple_form_for(@workout) do |f|
# some input fields
= f.button :submit

submitボタンがクリックされていない場合にのみ確認終了を呼び出す必要があることはわかっていますが、これを行う方法がわかりません。

4

2 に答える 2

0

だから私はそれを理解しました、少なくともそれはクロムとサファリで機能しますが、今のところ私はそれがieでは機能しないという印象を受けています。私が行ったのは、falseに設定され、送信ボタンが選択されている場合にのみtrueに設定されるブール値を作成することでした。

#javascripts/workouts.js.coffee
window.submitButtonClicked = false
window.confirmExit = () ->
  if window.submitButtonClicked
    null
  else
    "Your changes will not be saved."

$(document).ready ->
  $('#target').submit ->
    window.submitButtonClicked = true

#workouts/new.html.haml
:javascript
  window.onbeforeunload = confirmExit

#workouts_form.html.haml
#target
  = simple_form_for(@workout) do |f|
    # some input fields
    = f.button :submit

これが好奇心旺盛な人の助けになることを願っています。この#target行は実際のhamlであり、コメントではないことに注意してください。

于 2012-05-20T22:34:13.347 に答える
0

私が通常行うことは、フォームに実際に変更が加えられたときにのみ確認を表示することです。そのためには、ページ上のフォームをスキャンしてシリアル化し、メモリに保存する必要があります。次に、ユーザーがページを離れたら、フォームを再度シリアル化して、違いがあるかどうかを確認します。

それ以外の場合は、関数をバインドしてフォームのイベントを送信し、グローバルブール値window.formSubmittedをtrueに設定することをお勧めします。ページを離れるときにその変数をチェックして、確認ボックスを表示するかどうかを決定します。

于 2012-05-14T21:38:57.983 に答える