Javascript 在Rails中提交表单而不重新加载页面

Javascript 在Rails中提交表单而不重新加载页面,javascript,ruby-on-rails,ruby,page-refresh,preventdefault,Javascript,Ruby On Rails,Ruby,Page Refresh,Preventdefault,我在提交表单时遇到阻止页面重新加载的问题 我的HTML: <%= form_for @foo, html: {multipart: true}, remote: true do |f| %> <%= f.check_box :bar, :id => "bar_id", :onchange => "submit_function(this.form)" %> <% end %> 我的控制器: def update // awesome

我在提交表单时遇到阻止页面重新加载的问题

我的HTML:

<%= form_for @foo, html: {multipart: true}, remote: true do |f| %>
   <%= f.check_box :bar, :id => "bar_id", :onchange => "submit_function(this.form)" %>
<% end %>
我的控制器:

def update

   // awesome things for update

   respond_to do |format|
     format.html { redirect_to request.referrer }
     format.js {}
   end
end
单击复选框时,会触发JavaScript。“form.submit”将表单发送给控制器,但在这种情况下,整个页面将被重新加载。我想阻止这种重新加载

我也尝试过这个,但是,页面也被重新加载

function submit_function(form){
  form.submit(function () {
    $.ajax({
        type: this.method,
        url: this.action,
        data: $(this).serialize()
    });
    return false;
  });
}
是否有必要在更改之前更改“提交功能”,还是按复选框进行更改

我现在已经试过了。现在,页面不再是新的,但模型已更新

function submit_function(form) {

  $.ajax({
    type: form.method,
    url: form.action,
    data: $(form).serialize()
  });

  return false;
}
现在我在更新已更改的部分文件时遇到问题。如何使用js实现这一点


好的,我明白了。请求将以js格式发送,不再触发页面重新加载。我使用javascript编辑了复选框。

似乎与这种情况非常相似:

他们所做的是重新定义表单提交,改变行为


作为一项基本建议:使用相当低调的JS而不是内联的onchange事件

似乎与这种情况非常相似:

他们所做的是重新定义表单提交,改变行为


作为一个基本建议:如果我尝试以下方法,请使用相当不引人注目的JS,而不是内联的onchange事件

:->function submit\u function(form){form.submit(function(){$.ajax({type:this.method,url:this.action,data:$(this.serialize()});返回false;}); } ... 在javascript中,它也在重新加载development.log说了什么?比如“将MyController更新为HTML”?或者“作为JS”?如果我选中它作为“HTML”发送的复选框。因此,它触发控制器中的“重定向到request.referer”。如何对“js”执行此操作?根据以下内容:,如果将format.js移到format.html之前,控制器必须以js响应。或者必须在请求中显式设置数据类型。对此不确定,尚未尝试,但可能值得您尝试:)删除format.html将导致ActionController::UnknownFormat。。。但我尝试了另一件事。。如果我尝试以下操作,请参见上文:->function submit_function(form){form.submit(function(){$.ajax({type:this.method,url:this.action,data:$(this.serialize()});返回false;});}。。。在javascript中,它也在重新加载development.log说了什么?比如“将MyController更新为HTML”?或者“作为JS”?如果我选中它作为“HTML”发送的复选框。因此,它触发控制器中的“重定向到request.referer”。如何对“js”执行此操作?根据以下内容:,如果将format.js移到format.html之前,控制器必须以js响应。或者必须在请求中显式设置数据类型。对此不确定,尚未尝试,但可能值得您尝试:)删除format.html将导致ActionController::UnknownFormat。。。但我尝试了另一件事。。见上文
function submit_function(form) {

  $.ajax({
    type: form.method,
    url: form.action,
    data: $(form).serialize()
  });

  return false;
}