如何阻止远程表单提交?

时间:2013-08-28 14:11:36

标签: jquery ruby-on-rails coffeescript ruby-on-rails-4 ujs

我有一个可以远程和正常使用的表单。

= form_for @comment, html: { class: 'comment-form' }, remote: request.xhr? do |f|
  = f.text_area :body
  = f.submit

我希望仅在body textarea具有内容时才提交表单:

  $(document).on 'submit', '.comment-form', (e) ->
    text = $(this).find('#comment_body').val()
    false if text.length < 1

当表单不是Ajax时,该代码有效。但是当它处于远程状态时,它会失败并且表单仍然会提交。为什么?我也尝试过:

if text.length < 1
  e.preventDefault()
  false

我正在使用带有Turbolinks的Rails 4。

更新:我尝试绑定ajax:beforeSend事件,它仍然提交:

  $(document).on 'page:load', '.comment-form', ->
    $(this).bind 'ajax:beforeSend', ->
      alert "hi"

我看不到警报......

4 个答案:

答案 0 :(得分:4)

您可能会为ajax:beforeSend事件实施处理程序,以防止您的表单被提交。如果您的事件处理程序返回false,则看起来提交会停止。

维基:https://github.com/rails/jquery-ujs/wiki/ajax

示例实施:Stop $.ajax on beforeSend

答案 1 :(得分:2)

我正在使用'Here we go, with just one line! DoCmd.RunSQL "INSERT INTO Table (Alpha,Beta,Gamma) SELECT column1, column2, column2 FROM YourTable" 并按照 可停止事件 部分中的jquery-ujs文档中所述,您只需要返回{{ 1}} Rails 5.0.0.1事件中的值,用于停止请求并阻止发送表单。

所以这对我很有用:

false

我希望它对其他人有用。

答案 2 :(得分:0)

也许我没有得到你的问题,但是添加

是不够的
:required => true

到你的text_area

答案 3 :(得分:0)

这看起来像是一个jquery_ujs问题。尝试将活动更改为:

 $('.comment-form').on 'submit', (e) ->

我面临同样的问题,只有这样才能解决问题。