我试图关注:Rails: submit (via AJAX) when drop-down option clicked
但是,这些选项似乎都不起作用(提交,提交)
这是我目前正在刷新页面的内容:
= simple_form_for task, :remote => true, :format => :js do |f|`
= f.association :status, :label => false, :include_blank => false, :input_html => {:onchange=>'this.form.submit();' }`
这只是定期发布表单并使页面刷新。
如何让它通过ajax发布,以便页面不会刷新?
答案 0 :(得分:12)
只需将onchange
更改为此内容:
{:onchange=>'$(this.form).submit();' }
答案 1 :(得分:4)
虽然rails会覆盖默认操作并在您添加时通过AJAX提交:remote =>是的,您正在强制表单在onchange事件中发布常规内容。
你需要让自己的函数通过AJAX提交并使用$ .post()$.post()从你的onchange调用它来将表单发送到服务器。
答案 2 :(得分:4)
根据Marc的建议,我最终制作了一个事件绑定
= simple_form_for task, :remote => true, :format => :js, :html => {:id => "task_#{task.id}_status"} do |f|
= f.association :status, :label => false, :include_blank => false, :input_html => {:id => "task_#{task.id}_status_select" }
:javascript
jQuery(function($) {
$(document).ready(function() {
$("#task_#{task.id}_status_select").bind("change", function() {
$.ajax({
type: "PUT",
url: '#{project_story_type_story_task_path(@project, @story_type, @story, task)}',
data: 'task[status_id]=' + $('#task_#{task.id}_status_select').val(),
complete: function() {
$('#task_#{task.id}_status').prepend("<span id='task_#{task.id}_success' class='label success right'>SAVED</span>");
$('#task_#{task.id}_success').delay(500).fadeOut();
}
});