用于将选择框选项值设置为对象的代码

时间:2011-07-04 14:05:45

标签: javascript jquery html xhtml dhtml

在我有的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。

这可能吗?

3 个答案:

答案 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属性中保存ArraysObjects

如果它必须在值中,您只需要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 );