Javascript onchange事件中的索引变量不正确

Javascript onchange事件中的索引变量不正确,javascript,html,Javascript,Html,我正在尝试附加onchange事件以选择标记。 一个div中有多个标记。 因此,我使用for循环将事件附加到每个事件。 我想做的是更新另一个容器中的select标记。 基本上,如果用户选择的选项不是默认选项,它会从另一个select中删除“disabled”属性 我的问题是for循环中使用的索引变量“i”在onchange触发时出现错误。 “i”是最后一个递增的值。 好像它就像一个全局静态变量 我不知道如何搜索这个问题,所以我正在创建一个新的问题。我希望有人能帮忙 这是小提琴: 这是代码: va

我正在尝试附加onchange事件以选择标记。 一个div中有多个标记。 因此,我使用for循环将事件附加到每个事件。 我想做的是更新另一个容器中的select标记。 基本上,如果用户选择的选项不是默认选项,它会从另一个select中删除“disabled”属性

我的问题是for循环中使用的索引变量“i”在onchange触发时出现错误。 “i”是最后一个递增的值。 好像它就像一个全局静态变量

我不知道如何搜索这个问题,所以我正在创建一个新的问题。我希望有人能帮忙

这是小提琴:

这是代码:

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;
    }
var screenprint=document.getElementsByClassName('screenprint')[0];
var sp=screenprint.getElementsByClassName('placements')[0].getElementsByTagName('select');
对于(变量i=0;i
如果(this.value!==0){
语法不正确。如果(this.value!=0){,则应为

此外,当您打开Javascript控制台时,它会显示:
uncaughttypeerror:无法设置未定义的属性“disabled”

因此,
屏幕打印出现错误。getElementsByClassName('color')[0]。getElementsByTagName('select')[i]
,我认为您没有正确引用
标记

<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>

颜色数目
第一名
1.
2.
3.
4.
5.
6.

我建议您
在元素导航的每个步骤中发出警报
以查看它在哪里变为null并从那里修复它。

您能解释一下为什么它的语法不正确吗!==运算符执行严格的不等式比较。在检查相等之前,它不会尝试将操作数转换为兼容类型。是的,这是不正确的。Tha谢谢你指出这一点。我现在习惯了严格的测试,所以我使用了它。最终它会在测试时出现。@karan我编辑了我的答案检查SP[1]的值可能为空。我仍然无法在我的案例中找到如何实现它的方法。但感谢链接。