我正在尝试使用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”的值不会作为数组处理。我希望这里的某个人能够好好看看,或者建议一个解决方案。
谢谢,
- 迈克尔
答案 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
。