JavaScript:使用表单字段填充数组

时间:2013-03-05 22:10:39

标签: javascript arrays forms

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

<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”的值不会作为数组处理。我希望这里的某个人能够好好看看,或者建议一个解决方案。

谢谢,

- 迈克尔

2 个答案:

答案 0 :(得分:0)

它不起作用的原因是因为select的值是string而不是object 您可以使用jQuery.parseJSON将其重新转换为对象。

变化 var itemSelected = $(this).val();var itemSelected = $.parseJSON($(this).val());

答案 1 :(得分: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