在我有的html页面中,我有一个像这样的选择框值。
<select onChange="return filler(this.value);">
<option value="{'name':'rajiv',age:'40'}">a</option>
<option value="{'name':'mithun',age:'22'}">f</option>
</select>
我想传递一个javascript数组或对象作为选项值。 现在它将选项值视为字符串。
我希望它是一个数组,以便我可以通过
访问它this.value.name,填充函数中的this.value.age。
这可能吗?
答案 0 :(得分:24)
您将无法在value
属性中存储对象/数组,但是可以选择使用jQuery 1.4.3 +自动支持json的data-*
属性
<select>
<option data-value='{"name":"rajiv","age":"40"}'>a</option>
<option data-value='{"name":"mithun","age":"22"}'>f</option>
</select>
使用.change()
$("select").change(function(){
alert($(this).find(":selected").data("value").age);
});
<强> Example on jsfiddle 强>
答案 1 :(得分:8)
不,不仅如此。值必须是字符串。我强烈建议您使用jQuerys .data()
方法在expando属性中保存Arrays
或Objects
。
如果它必须在值中,您只需要JSON解码(.parse)它:
var myValue = JSON.parse(this.value);
myValue.age; // 40
myValue.name // rajiv
但同样,我认为这不是一个好的解决方案。看看http://api.jquery.com/jQuery.data/
此外,如果将JSON字符串放在任何data-
HTML5属性中,jQuery将自动转换数组和对象。例如:
<option value="A" data-info="{'name':'rajiv',age:'40'}">something</option>
如果您现在使用jQuery访问该节点,我们会自动在其数据expando中获取该对象
$('option').data('info').name; // === rajiv
答案 2 :(得分:3)
您可以使用parseJSON在使用时将字符串转换为对象,但该值必须是字符串。
var option = $('select').val();
var selected = $.parseJSON(option);
alert( selected.name + ': ' + selected.age );