Ключевое слово, которое делает то, что вы хотите:
ите за название - я не смог придумать, как его сформулировать.
Вот сценарий:
У меня есть функция, которая создает элемент:
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 является глобальной переменной.
Спасибо