1

我正在尝试使用 JavaScript 和 HTML 表单元素填充和解析数组。以下测试产生预期结果(“Test1 Test2 Test3”呈现在目标 div 中)。这是工作测试代码:

<div>
    <span id="put-stuff-here"></span>
    <span id="put-stuff-here2"></span>
    <span id="put-stuff-here3"></span>
</div>

<script type="text/javascript">
    var itemSelected = { 'fields': [ 'Test1', 'Test2', 'Test3' ] }
    document.getElementById('put-stuff-here').innerHTML = itemSelected.fields[0];
    document.getElementById('put-stuff-here2').innerHTML = itemSelected.fields[1];
    document.getElementById('put-stuff-here3').innerHTML = itemSelected.fields[2];      
    })
</script>

但是,当我尝试使用表单字段定义变量“itemSelected”时,目标 div 中没有呈现任何内容。这是非工作代码:

<div>
    <form>
        <select id="getItem">
            <option value="{ 'fields': [ 'Test1', 'Test2', 'Test3' ] }">ItemName</option>
            <option value="{ 'fields': [ 'Test4', 'Test5', 'Test6' ] }">ItemName2</option>
        </select>
    </form>
</div>

<div>
    <span id="put-stuff-here"></span>
    <span id="put-stuff-here2"></span>
    <span id="put-stuff-here3"></span>
</div>

<script type="text/javascript">
    $("#getItem").change(function () {
        var itemSelected = $(this).val();
        document.getElementById('put-stuff-here').innerHTML = itemSelected.fields[0];
        document.getElementById('put-stuff-here2').innerHTML = itemSelected.fields[1];
        document.getElementById('put-stuff-here3').innerHTML = itemSelected.fields[2];      
    })
    .change();
</script>

由于某种原因,传递给“itemSelected”的值不会作为数组处理。我希望这里的人会好心看看,也许会提出一个解决方案。

谢谢,

-迈克尔

4

2 回答 2

0

它不起作用的原因是因为值select是 astring而不是 aobject 你可以用jQuery.parseJSON它来把它变成一个对象。

更改 var itemSelected = $(this).val();var itemSelected = $.parseJSON($(this).val());

于 2013-03-05T22:19:45.277 回答
0

来自您的表单的值是一个字符串,这就是为什么它没有按照您的意愿去做。我建议更改您的表单值:

<select id="getItem">
  <option value="Test1,Test2,Test3">ItemName</option>
  <option value="Test4,Test5,Test6">ItemName2</option>
</select>

然后修改您的事件处理程序:

var itemSelected = $(this).val().split(',');

那会给你你的数组。假设fields只是达到目的的一种手段,如果您出于其他原因仍然需要它,itemSelected.fields当然只需将您的数组分配给即可。

于 2013-03-05T22:23:49.533 回答