首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止远程表单提交?

如何阻止远程表单提交?
EN

Stack Overflow用户
提问于 2013-08-28 22:11:36
回答 4查看 3.3K关注 0票数 6

我有一个表单,既可以远程使用,也可以正常使用。

代码语言:javascript
复制
= form_for @comment, html: { class: 'comment-form' }, remote: request.xhr? do |f|
  = f.text_area :body
  = f.submit

我希望表单仅在body文本区域包含内容时才提交:

代码语言:javascript
复制
  $(document).on 'submit', '.comment-form', (e) ->
    text = $(this).find('#comment_body').val()
    false if text.length < 1

当表单不是Ajax时,该代码可以正常工作。但是当它是远程的时候,它会失败,并且表单仍然会提交。为什么?我也试过了:

代码语言:javascript
复制
if text.length < 1
  e.preventDefault()
  false

我使用的是带有Turbolinks的Rails 4。

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

代码语言:javascript
复制
  $(document).on 'page:load', '.comment-form', ->
    $(this).bind 'ajax:beforeSend', ->
      alert "hi"

我看不到警报。

EN

回答 4

Stack Overflow用户

发布于 2013-08-29 06:31:43

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

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

示例实现:Stop $.ajax on beforeSend

票数 4
EN

Stack Overflow用户

发布于 2017-03-14 04:45:49

我使用的是Rails 5.0.0.1,正如jquery-ujs文档中可停止事件部分所述,您只需在ajax:beforeSend事件中返回一个false值,即可停止请求并阻止发送表单。

所以这对我来说非常有效:

代码语言:javascript
复制
$(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;
    }
});

我希望它能对其他人有用。

票数 4
EN

Stack Overflow用户

发布于 2013-08-29 00:55:14

也许我没有理解你的问题,但这还不足以添加一个

代码语言:javascript
复制
:required => true

到你的text_area

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18490396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档