为什么我的表单没有提交我想要的内容?

时间:2014-04-08 12:53:34

标签: javascript ruby-on-rails ruby forms

我正在尝试提交javscript生成的值。 脚本是:

var save = function () {
    var left = document.getElementById("left"); //Get a select box
    var result = document.exchange; //get the form
    result.value = ""; //set it's value to ""
    for (i = 0; i < right.length; i++) {
        result.value = result.value + "," + left.options[i].value; //set it's value to the values of the select box, divided by commas.
    }
    result.submit(); //submit the form
}

但我的表格只提交了这个:

{
    "utf8" = > "✓",
        "authenticity_token" = > "9gf3upm65ugEhsNvdcaykjdlg7xZbOyTiWJs79SnY3A=",
        "timespan_id" = > {
        "name" = > ["",
            ""]
    },
        "subgroup_id" = > "369141985"
}

表单由我的Rails生成。它看起来像这样:

    <%= form_tag(subgroup_change_timespans_path(@subgroup), {
     id: 'exchange',
     name: 'exchange'
 }) do %> <% timespans_array = @subgroup.timespans.all.map { | timespan | [timespan.name, timespan.id]
 } %> <%= select(: timespan_id, : name, options_for_select(timespans_array), {}, {: multiple = > true,
     : style = > "width: 300px; background-color: #9FE",
     : width = > "300",
     : size = > 20,
     : id = > "left"
 }) %> <%= link_to "<<", {
     anchor: "",
     remote: true
 }, {
     id: "toleft",
     w_command: "add_timespan",
     w_auth: form_authenticity_token,
     w_controller: "subgroups",
     w_id: @subgroup.id.to_s
 } %> <%= link_to ">>", {
     anchor: "",
     remote: true
 }, {
     id: "toright",
     w_command: "rem_timespan",
     w_auth: form_authenticity_token,
     w_controller: "subgroups",
     w_id: @subgroup.id.to_s
 } %> <% timespans_array = Timespan.all.map { | timespan | [timespan.name, timespan.id]
 } %> <%= select(: timespan_id, : name, options_for_select(timespans_array), {}, {: multiple = > true,
     : style = > "width: 300px; background-color: #F99",
     : width = > "300",
     : size = > 20,
     : id = > "right"
 }) %> <%= link_to "save", {
     anchor: "",
     remote: true
 }, {
     id: "save"
 } %> <% end %>

但正如我告诉你的那样: 它只提交两个隐藏字段的名称:

<input name="timespan_id[name][]" type="hidden" value="" />
<input name="timespan_id[name][]" type="hidden" value="" />

我认为,这两者有问题。但我不明白。 你有什么想法吗?


@МалъСкрылевъ:必须是这样的。 表单应如下所示: enter image description here

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法: 我必须将选择框放在表单之外,这样就删除了这个参数:

"timespan_id" = > {
                  "name" = > ["",
                              ""]

然后我在表单中添加了一个名为'string'的hidden_field_tag。 最后,我将保存功能更改为:

var save=function()
{
var left = document.getElementById("left");
var result;
result="";
for(i=0;i<left.length;i++)
    {       
    result = result+","+left.options[i].value;
    }    
var string=document.getElementById("string");
alert(result);
string.value=result; 
document.exchange.submit();
}