为什么这个小提琴不起作用:
jsFiddle of changing span contents based on class name
<label>Change:</label>
<select name="list" id="list">
<option value="Test_a" selected>Test_a</option>
<option value="Test_b">Test_b</option>
<option value="Test_c">Test_c</option>
<option value="Test_d">Test_d</option>
</select>
<br/>1: <span name="result" class="result">Test_a</span>
<br/>2: <span name="result" class="result">Test_a</span>
<br/>3: <span name="result" class="result">Test_a</span>
<script>
var list1 = document.getElementById('list');
var tag1 = document.getElementsByClassName('result');
for (var i = 0; i < elems.length; i++) {
list1.onchange = function () {
tag1.innerHTML = this.value;
};
};
</script>
我希望能够更改所有三个spans
(class="result"
)以显示相同的下拉菜单选项值。
如果我使用getElementById
并且span
只有一个id="result"
结果,那么它可以正常工作。
答案 0 :(得分:1)
我认为this is what you're after。在更改列表时,使用列表的值更新所有跨度。
var list = document.getElementById('list');
var spans = document.getElementsByClassName('result');
list.onchange = function () {
for (var i = 0; i < spans.length; i++) {
spans[i].innerHTML = this.value;
}
}
答案 1 :(得分:0)
为什么这个小提琴不起作用
因为代码中的tag1
不是对单个DOM元素的引用,而是具有.innerHTML
属性,但该方法返回HTMLCollection个匹配元素,如果你想单独操纵它们,可以循环使用:
list1.onchange = function () {
for (var i=0, l=tag1.length; i<l; i++) {
tag1[i].innerHTML = this.value;
};
};