【问题标题】:How to clear a remote form in Rails 3 using Coffeescript after submission?提交后如何使用 Coffeescript 在 Rails 3 中清除远程表单?
【发布时间】:2012-04-25 08:02:18
【问题描述】:

我正在使用远程表单在 Rails 中提交 cmets。用户应该被发送到一个新页面,因为我正在使用这个远程表单。

当我点击“提交”时,我希望它的状态淡入显示“感谢提交”并且表格清晰。然而,我无法弄清楚如何为我的一生做到这一点。

问题在于,当我执行 $('form').submit -> 然后清除文本区域时,它会在我实际完成提交之前重置它,所以我在 Rails 中得到一个空白提交。

我正在使用 Rails 3.2、Coffeescript 和 Jquery。

【问题讨论】:

  • 你能展示你到目前为止所做的事情吗?
  • 格式不正确 $ -> $('.tab-pane > form').submit -> showStatus "问题已提交!" $('[name="broadcast[cmets_attributes][0][content]"]').val('')

标签: jquery ruby-on-rails ruby ruby-on-rails-3 coffeescript


【解决方案1】:

也许您希望在提交表单时执行此操作,但是...您使用 jQuery 的绑定(或实时)方法并等待它返回成功。

$('#submit_button')
  .live('ajax:success', clearForm)
  .live('ajax:success', notifyUser)

如果您想不管成功或在请求的任何阶段都这样做,请检查其他可用的 ajax 回调“beforeSend”、“完成”、“错误”等。

【讨论】:

    【解决方案2】:

    DanS 答案的变体:

    $('form').submit (e) ->
      e.preventDefault() # prevent form submitting multiple times
      $.post(@action, $(@).serializeArray()).done -> # manually submit the form
        $(@).find('input').each -> @reset() # afterwards clear the form
      return
    

    我在 ajax 调用之后添加了 done 回调,这将强制在清除表单之前等待 ajax 完成。

    【讨论】:

      【解决方案3】:

      表单提交加载一个新页面。如果您想让用户保持在同一页面上并仍然提交表单数据,您必须手动发送表单:

      $('form').bind 'submit', (e) ->
          e.preventDefault() # don't send the user to a new page
          $.post this.action, $(this).serializeArray() # manually submit formdata to form url
          $(this).find(':input').each -> this.reset() # reset all fields in the form
      

      (以上我没有测试,希望没有错误)

      【讨论】:

        【解决方案4】:

        这应该可行:

        $('form').submit (e) ->
          e.preventDefault() # prevent form submitting multiple times
          $.post @action, $(@).serializeArray() # manually submit the form
          $(@).find('input').each -> @reset() # afterwards clear the form
          return
        

        它会生成以下 javascript:

        $('form').submit(function(e) {
          e.preventDefault();
          $.post(this.action, $(this).serializeArray());
          $(this).find('input').each(function() {
            return this.reset();
          });
        });
        

        【讨论】:

        • return false 似乎由于某种原因根本无法提交。其呈现为 return false;在javascript中
        • 我用替代方法修改了我的答案
        • 嗯,我觉得我们真的很亲密。看起来它直到函数结束才真正提交,这真的很奇怪。我使用了断点,当@submit 被调用时,我看到确实如此,直到函数在它已经改变了值之后结束之前,rails 控制台中什么都没有弹出。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 2012-01-31
        • 2016-04-16
        相关资源
        最近更新 更多