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

我通常做的是仅在实际对表单进行更改时才显示确认信息。为此,您需要扫描页面上的表单,将它们序列化并将其存储在内存中。然后,当用户离开页面时,再次序列化表单,看看是否有区别。

否则,您可能希望绑定一些函数来提交表单的事件,将一些全局布尔值设置window.formSubmitted为 true。离开页面时检查该变量以确定是否要显示确认框。

于 2012-05-14T21:38:57.983 回答
0

所以我想通了,至少它适用于 chrome 和 safari,尽管现在我的印象是它不适用于 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 回答