无法在动态生成的选择上选择选项

时间:2018-12-11 08:28:16

标签: javascript jquery

我有一个遍历对象集合的方法:

$.each(obj.actions, function (i, act) {
     generate_action(i+1);
     $('.section-actions[data-id=' + i + 1 + '] > option[value='+act.id_section_to+']').prop('selected', true);
});

基本上有两个具有以下属性的对象:

{id: "1", id_section: "1", id_section_to: "2", id_criteria: "1", id_parameter: "1"}
{id: "2", id_section: "2", id_section_to: null, id_criteria: "3", id_parameter: "2"}

方法generate_action创建一个新选择:

generate_action = function(data_id)
{ 
    var select = '<select class="form-control section-actions" data-id="' + data_id + '"><option value="">END</option><option value="2">GO TO SEC 2</option></select>';

   $('#select-container').append(select);
}

将选择正确添加到容器中,在主循环中执行此过程后,我试图设置选项的值,该选项已经可用但代码不起作用。

我无法获得在第一个2中选择了值select的选项,当然在第二个select中它起作用了,因为第一个选项已经具有空值。 / p>

现在,我在循环之后尝试了以下代码:

$('.section-actions[data-id="1"] > option[value=2]').prop('selected', true);

,并且有效。我做错了什么?从昨天开始我一直在head头

2 个答案:

答案 0 :(得分:0)

您不需要将函数分配给变量。

更改:

generate_action = function(data_id)

收件人

function generate_action(data_id)

OR::只需在$.each()

之前声明并分配函数

var obj = {actions:[ {id: "1", id_section: "1", id_section_to: "2", id_criteria: "1", id_parameter: "1"},
{id: "2", id_section: "2", id_section_to: null, id_criteria: "3", id_parameter: "2"}]}

var generate_action = function(data_id)
{ 
    var select = '<select class="form-control section-actions" data-id="' + data_id + '"><option value="">END</option><option value="2">GO TO SEC 2</option></select>';
   $('#select-container').append(select);
}

$.each(obj.actions, function (i, act) {
     generate_action(i+1);
     $('.section-actions[data-id=' + i + 1 + '] > option[value='+act.id_section_to+']').prop('selected', true);
});
$('.section-actions[data-id="1"] > option[value=2]').prop('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="select-container"></div>

答案 1 :(得分:0)

使用[data-id=' + (i + 1) + ']代替[data-id=' + i + 1 + '],如下所示。

$('.section-actions[data-id=' + (i + 1) + '] > option[value='+act.id_section_to+']').prop('selected', true);

您可以在下面查看您的代码有什么问题。

var i = 1, act = { id_section_to: 1 };
console.log('If you use [data-id= + i + 1 + ] then it will generate following');
console.log('.section-actions[data-id=' + i + 1 + '] > option[value='+act.id_section_to+']');
console.log('If you use [data-id= + (i + 1) + ] then it will generate following');
console.log('.section-actions[data-id=' + (i + 1) + '] > option[value='+act.id_section_to+']');