重命名由javascript

时间:2017-01-20 16:06:29

标签: javascript jquery ruby-on-rails parameters

我有一个按钮,让我按下每个按钮创建额外的输入字段,在提交表单上将每个输入字段保存到一个(数组)参数中。

按钮erb看起来像这样:

<%= button_tag 'Add a new field', id: 'add_correct_answer', type: 'button' %>

虽然它背后的JavaScript看起来像这样。

$(document).ready(function() {
    // When the add_button is pressed
    $('#add_correct_answer').click(function() {
    // Container (already created)
    var container = $('.buttons-fields');

    // Create the input wrapper (input tag + delete button), and append it to `container`
    var input_wrapper = $('<div>', { class: 'input-wrapper' }).appendTo(container);

    // Create an input tag, and append it to input_wrapper
    var input = $('<input>', { name: 'correct_answers[]', type: 'text' }).appendTo(input_wrapper);

    // Create the remove button, append it to input_wrapper, and add a click callback to
    // remove the input wrapper if it's pressed.
    var remove = $('<span>', { text: 'x' }).appendTo(input_wrapper).click(function() {
      input_wrapper.remove();
    });
    });

此函数创建可以使用params[:correct_answers]调用的param,它等于具有输入字段内容的数组。

我想要做的是将该参数更改为params[:task][:correct_answers]。我该怎么做?

我试图改变:

var input = $('<input>', { name: 'task[correct_answers[]]', type: 'text' }).appendTo(input_wrapper);

它看起来很好作为参数,但没有任何东西被保存到这里。

2 个答案:

答案 0 :(得分:1)

您可以创建2d数组而不是1d数组。

1d数组就像int[] a = [23,45,494,599]然后你用a[0]或其他任何我确定你知道的地方打电话。

然而,2D阵列有点困难。设置看起来像这样:

int[] a = 
[
    [1,4,155,164,23,43],//This one
    [8,75,45,3134,45,6],
    [143,55,7,8,8754,5],
] 

并使用a[0][3]调用并返回164.第一个括号选择我标记为“This one”的大数组内的数组,然后第二个数字括号内的数字获取该数组内的数字。

现在对2d数组的解释是真正的答案:

所以2个想法。尝试使用task[][]的设置并执行类似for(blah)task[I]=correct_answers;的操作。您可能不需要for,但idk您真正需要的东西。或者您可以尝试task[0][0]=correct_answers,但我不知道它是否有用。我想我可以保留它。

正如OP在评论中所说: “ 问题是:我需要更改params名称。参数不是典型的变量,所以上面提到的事情会被认为是非常糟糕的做法。什么可以实际工作,将params [:correct_answers]分配给params [:task] [:correct_answers],然后在提交表单之前删除params [:correct_answers]。“

所以我想我的方式不行。除非你不关心不良行为&gt;:)

答案 1 :(得分:0)

我所要做的就是改变

var input = $('<input>', { name: 'correct_answers[]', type: 'text' }).appendTo(input_wrapper);

成:

var input = $('<input>', { name: 'task[correct_answers][]', type: 'text' }).appendTo(input_wrapper);