Ключевое слово, которое делает то, что вы хотите:

ите за название - я не смог придумать, как его сформулировать.

Вот сценарий:

У меня есть функция, которая создает элемент:

buildSelect(id,cbFunc,...)

Внутри buildSelect это делает это:

select.attachEvent('onchange',cbFunc);

У меня также есть массив, который идет:

var xs = ['x1','x2','x3'...];

Учитывая все это, у меня есть код, который делает это:

for(var i = 0; i < xs.length; i++)
{
    buildSelect(blah,function(){ CallBack(xs[i],...) },...);
}

Проблема заключается в том, что когда onchange запускается на одном из этих выборок, он корректно переходит к CallBack (), но первый параметр неверен. Например, если я изменяю третий выбор, я ожидаю, что CallBack () будет вызываться с помощью xs [2], вместо этого я получаю некоторые различные вещи, такие как xs [3] или что-то еще.

Если я немного изменю это:

for(var i = 0; i < xs.length; i++)
{
    var xm = xs[i];
    buildSelect(blah,function(){ CallBack(xm,...) },...);
}

Я все еще получаю неправильные значения в CallBack (). Что-то говорит мне, что это связано с областью действия / замыканием, но я не могу понять, что именно.

Я просто хочу, чтобы первый выбор вызывал CallBack для onchange с первым параметром xs [0], второй select с xs [1] и так далее. Что я могу здесь делать не так?

Я должен уточнить, что xs является глобальной переменной.

Спасибо

Ответы на вопрос(4)

Ваш ответ на вопрос