jquery json select—将select选项设置为整个json元素,而不仅仅是其中的值

jquery json select—将select选项设置为整个json元素,而不仅仅是其中的值,jquery,arrays,json,select,option,Jquery,Arrays,Json,Select,Option,我将通过一个json javascript对象为select创建选项。如果我使用1个元素,它可以正常工作,就像我在ajax调用中的“成功”一样。。。。正在从php获取数据 var my_json = JSON.parse(data); for (var a=0; a < my_json.length; a++) { $('#my_list') .append($('<option', { value: my_json[a].SOMEFIELD } ) .text(my_json[a

我将通过一个json javascript对象为select创建选项。如果我使用1个元素,它可以正常工作,就像我在ajax调用中的“成功”一样。。。。正在从php获取数据

var my_json = JSON.parse(data); 
for (var a=0; a < my_json.length; a++)
{
$('#my_list')
.append($('<option', { value: my_json[a].SOMEFIELD } )
.text(my_json[a].SOMEOTHERFIELD)); 
} 
并将6或7个字段作为选项值传递…-问题是,在select的onclick函数中,我可以从select中获取val并查看它是一个对象,但试图从中获取任何字段似乎都是未定义的。。。。 传递的_数据=$‘我的_列表’.val; var passed_id=传递的_数据[0]。id; 并且试着。。。 var passed_id-passed_data[id]; 等它们没有定义。。。。
我可以看到传递的数据是一个对象,但似乎无法从中获取任何字段…

它非常不可读,请编辑并单击“代码”按钮

无论如何,从我所读到的内容来看,我不知道它是否能解决您的问题,但使用$。我相信每种方法都更好:

var my_json = JSON.parse(data); 
$.each(my_json, function(){
    $('#my_list').append($(this).SOMETHING);
});

如果我明白了你想说的话,你需要一次选择才能在值中有多个值?如果是这种情况,我建议将自定义属性添加到每个选定项中,然后读取它们。如下所示:

$("#SelectBox").append($("<option />").val("OriginalValue").text("RandomText").attr("CustomAttribute","CustomAttributesValue"));
这将返回每个选择项的CustomAttribute

希望这有帮助,这就是你所要求的。如果没有,你能澄清这个问题吗

谢谢

编辑:这样做可能会破坏页面的DOCTYPE,这意味着页面的XML不正确。您可以将其放大并添加自定义属性。你的页面将呈现所有的时间不要误会我,但它是无效的。
如果您关心XML是否正确

谢谢大家。最后,我在for循环中将选项的值设置为my计数器变量。然后我将var设置为my_json全局。这样,在select的onchange函数中,我只需执行以下操作:

var passed_element_number = ($'#my_select_list').val();
var passed_id = my_json[passed_element_number].ID;
var passed_otherfield = my_json[passed_element_number].OTHERFIELD;
我不确定为什么它不允许我将who json对象设置为select选项的值,然后将字段1乘1取出来,这可能是我的错误,也可能是不可能的,但这可以正常工作

$("#SelectBox").change(function() {
    alert($(this).find("option:selected").attr("CustomAttribute"));
});
var passed_element_number = ($'#my_select_list').val();
var passed_id = my_json[passed_element_number].ID;
var passed_otherfield = my_json[passed_element_number].OTHERFIELD;