2015-10-06 153 views
1

我在防止页面重新提交表单时遇到了问题。在无需重新加载页面的Rails中提交表单

我的HTML:

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

我的javascript:

function submit_function(form){ 
    form.submit(function (ev) { 
     ev.preventDefault(); 
    }); 
} 

我的控制器:

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我编辑了复选框。

回答

0

似乎非常相似,这种情况:AJAX rails check box using javascript .submit()

他们所做的事情有重新定义表单提交,改变行为。

而作为一个基本的建议:用不显眼的,而JS,而不是内联的onchange事件

+0

如果我试试这个: - >功能submit_function(形式){ form.submit(函数(){$ 阿贾克斯( { 类型:this.method, url:this.action, data:$(this).serialize() }); return false; }); } ...在JavaScript中,它也重新加载 – DraGott

+0

development.log是什么意思?像“处理MyController#更新为HTML”一样?或“作为JS”? –

+0

如果我把这个复选框作为'HTML'发送。因此它在控制器中触发“redirect_to request.referrer”。我怎样才能做到'js'? – DraGott

相关问题