リモートと通常の両方で使用できるフォームがあります。
= 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"
アラートが表示されない...