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

时间:2012-03-21 12:53:28

标签: javascript jquery

我正在尝试将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工作?

2 个答案:

答案 0 :(得分:7)

这被称为最后一个问题,并使用闭包来解决:

$(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);
    }
}

它会创建一个新范围,因此当我在原始范围内进行更改时,它不会在旧范围内更改。

答案 1 :(得分:0)

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

这种方式也有效。