onchange事件中索引变量不正确

时间:2014-06-25 18:22:22

标签: javascript html

我正在尝试附加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;
    }

1 个答案:

答案 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元素导航的每一步,看看它变为空的位置并从那里修复它。