在Rails 3.2中我试图提交一个包含选择字段的表单,该表单之前已使用ajax添加到此表单中。像这样:
第一个表单(有:remote => true
)用js.erb响应(其中包括)在另一个表单中呈现一个select字段(选择字段在部分中):
$('#target_variables_div').html("<%= j render(:partial => 'logged_data/select_vars', :locals => { :vars => @vars, :date => @date }) %>")
此“另一个”表单(也包含:remote => true
)包含更多表单字段,但这些字段在页面加载时静态加载。
问题在于,当我提交这个“另一个”形式时,它只发送静态参数,不包括之前加载了部分的选择字段。
我知道它与jQuery live
或on
有关,但我仍然无法提交完整的表单......
感谢您的帮助!
答案 0 :(得分:0)
Jquery live
和on
方法用于监听网页上新添加的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