我有一个可以远程和正常使用的表单。
= 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"
我看不到警报......
答案 0 :(得分:4)
您可能会为ajax:beforeSend
事件实施处理程序,以防止您的表单被提交。如果您的事件处理程序返回false
,则看起来提交会停止。
答案 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) ->
我面临同样的问题,只有这样才能解决问题。