我有一个表单,既可以远程使用,也可以正常使用。
= 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"我看不到警报。
发布于 2013-08-29 06:31:43
您可以潜在地为ajax:beforeSend事件实现一个处理程序,以防止表单被提交。如果您的事件处理程序返回false,则提交看起来会停止。
发布于 2017-03-14 04:45:49
我使用的是Rails 5.0.0.1,正如jquery-ujs文档中可停止事件部分所述,您只需在ajax:beforeSend事件中返回一个false值,即可停止请求并阻止发送表单。
所以这对我来说非常有效:
$(document).on("ajax:beforeSend", "form#messages_form", function (e, data, status, xhr) {
var len = $.trim($('#message_body').val()).length;
if (len > 3) {
console.log("Send form!");
return true;
} else {
console.log("Stopping request...");
return false;
}
});我希望它能对其他人有用。
发布于 2013-08-29 00:55:14
也许我没有理解你的问题,但这还不足以添加一个
:required => true到你的text_area?
https://stackoverflow.com/questions/18490396
复制相似问题