在循环中初始化onchange事件-Javascript

Initialize onchange event inside a loop - Javascript

本文关键字:事件 -Javascript onchange 初始化 循环      更新时间:2023-09-26

我正在尝试将onChange事件绑定到循环中的7个下拉列表。但是,当任何下拉列表发生更改时,最后一个下拉列表的onChange事件总是被执行。

$(function () {
    for (var i = 1; i <= 7; i++) {
        $('select[id$="bodysys' + i + '"]').change(function () {
            if (this.value == "99")
                enabletextbox($('input[id$="bodysys' + i + 'spec"]')[0]);
        });
    }
}

如何使onChange分别适用于所有元素?

这被称为最后一个唯一的问题,使用闭包解决

$(function () {
    for (var i = 1; i <= 7; i++) {
        (function (i) {
            $('select[id$="bodysys' + i + '"]').change(function () {
                if (this.value == "99")
                    enabletextbox($('input[id$="bodysys' + i + 'spec"]')[0]);
            });
        })(i);
    }
}

它创建了一个新的范围,所以当我在原始范围中更改时,它不会在旧范围中更改。

$('select[id*="bodysys"]').each(function (index) {
        $(this).change(function () {
            if ($("option:selected", this).val() == "99")
                enabletext($('input[id$="bodysys' + (index + 1) + 'spec"]')[0]);
        });
    });

这种方式也有效。