我正在尝试附加onchange事件来选择标签。 div中有多个标签。 所以我使用for循环将事件附加到每个。 我想要做的是更新另一个容器内的选择标记。 基本上,如果用户选择默认选项以外,它会从另一个选项中删除“禁用”属性。
我的问题是在onchange触发器中,for循环中使用的索引变量'i'出错了。 'i'出现了最后一个递增值。 好像它就像一个全局静态变量。
我不知道如何搜索这个问题所以我正在创建一个新问题。我希望有人可以提供帮助。
这里是小提琴:http://jsfiddle.net/z3U3Y/
这是代码:
var screenprint = document.getElementsByClassName('screenprint')[0];
var sp = screenprint.getElementsByClassName('placements')[0].getElementsByTagName('select');
for (var i = 0; i < sp.length; i++) {
sp[i].onchange = function(t){
if(this.value!==0){
screenprint.getElementsByClassName('color')[0].getElementsByTagName('select')[i].disabled= false;
}
else{
screenprint.getElementsByClassName('color')[0].getElementsByTagName('select')[i].disabled= true;
}
答案 0 :(得分:1)
if(this.value!==0){
语法不正确。应该是if(this.value!=0){
。
此外,当您打开Javascript控制台时,它会显示:Uncaught TypeError: Cannot set property 'disabled' of undefined
因此screenprint.getElementsByClassName('color')[0].getElementsByTagName('select')[i]
出现错误,我认为您没有正确引用<select>
代码。
<div class="color">
<h3>No. of colors</h3>
<label >For 1st placement</label>
<select disabled name="color">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
</div>
我建议您alert
元素导航的每一步,看看它变为空的位置并从那里修复它。