Rails提交包含ajax加载部分的表单

时间:2013-02-27 11:56:16

标签: jquery ruby-on-rails ajax ajaxform

在Rails 3.2中我试图提交一个包含选择字段的表单,该表单之前已使用ajax添加到此表单中。像这样:

  1. 第一个表单(有:remote => true)用js.erb响应(其中包括)在另一个表单中呈现一个select字段(选择字段在部分中):

    $('#target_variables_div').html("<%= j render(:partial => 'logged_data/select_vars', :locals => { :vars => @vars, :date => @date }) %>") 
    
  2. 此“另一个”表单(也包含:remote => true)包含更多表单字段,但这些字段在页面加载时静态加载。

  3. 问题在于,当我提交这个“另一个”形式时,它只发送静态参数,不包括之前加载了部分的选择字段。

    我知道它与jQuery liveon有关,但我仍然无法提交完整的表单......

    感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

Jquery liveon方法用于监听网页上新添加的dom元素,例如首次加载时不存在的按钮,但是会添加dinamically并需要有一个附加到它的事件,如:

$('#dinamyc_button').on('click', function() {});

在您的情况下,我相信您必须手动设置选择值。尝试为表单创建一个监听器,在提交时将把选择值附加到要传递给服务器的数据中:

$('#your_form').submit(function() {
  var formData = $(this).serialize();
  var selectValue = $('#your_select').val();
  formData['select'] = selectValue; // or formData.select = selectValue;
  $.ajax({
    type: 'POST',
    url: whatever,
    data: formData
  })
});

这只是一个不完美的例子,但你明白了。

答案 1 :(得分:0)

感谢MurifoX,我终于设法完全提交了表单。以前我在加载DOM之后运行了提交块(在我的CoffeeScript文件中的jquery ->块内)。结果CoffeeScript是:

$('#generate-button').on "click", (e) ->
  e.preventDefault()
  formData = $(this).parents("form").serialize()
  selectValue = $('#select_vars_field').val()
  $.ajax
    type: 'POST',
    url: '/logged_data/get_chart',
    data: formData + "&vars=" + selectValue