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

lokaqttq  于 2023-09-29  发布在  Java
关注(0)|答案(4)|浏览(110)

在一个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,在filler函数中使用this.value.age。
这可能吗?

2nc8po8w

2nc8po8w1#

您将无法在value属性中存储对象/数组,但是可以选择使用data-*属性,该属性在jQuery 1.4.3+中自动支持json

<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

5kgi1eie

5kgi1eie2#

不,不是那样的。值必须是字符串。我强烈建议使用类似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
9q78igpj

9q78igpj3#

使用时可以使用parseJSON将字符串转换为对象,但值需要是字符串。

var option = $('select').val();
  var selected = $.parseJSON(option);
  alert( selected.name + ': ' + selected.age );
xdyibdwo

xdyibdwo4#

React解决方案

const myObjects = [
    {
        text: 'a',
        value: 1
    },
    {
        text: 'b',
        value: 2
    },
];

const handleSelectChange = (myStringifyObject) => {
    const myObject = JSON.parse(myStringifyObject);
    // logic with myObject
} 

<input type='select' onChange={(evt) => handleSelectChange(evt.target.value)}>
    {myObjects.map((myObject) => (
        <option
            value={JSON.stringify(myObject)}
            key={myObject.value}
        >
            {myObject.text}
        </option>
     ))}
</input>

相关问题