6

リモートと通常の両方で使用できるフォームがあります。

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

bodyテキストエリアにコンテンツがある場合にのみフォームを送信したい:

  $(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

4 に答える 4

4

イベントのハンドラーを実装してajax:beforeSend、フォームが送信されないようにすることができます。イベント ハンドラが を返すと、送信が停止するようfalseです。

ウィキ: https://github.com/rails/jquery-ujs/wiki/ajax

実装例: beforeSend で $.ajax を停止する

于 2013-08-28T22:31:42.640 に答える
0

これは jquery_ujs の問題のようです。イベントを次のように変更してみてください。

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

私は同じ問題に直面していますが、これだけで問題が解決しました。

于 2016-06-15T21:42:27.000 に答える