Ожидается, что x[i]
вернет элемент DOM, который вы только что сохранили, но вы храните элемент DOM в x[b[i]]
, а не x[i]
. Будьте последовательны, и эта ошибка исчезнет.
код еще не будет работать, хотя, потому что вы падаете в ловушку закрытия: Когда происходит щелчок, обработчик события будет использовать i
, как это тогда, а не как это было, когда обработчик был создано. Таким образом, все обработчики будут видеть i
как a.length
и терпят неудачу.
Я обычно использую функцию строителя, чтобы справиться с этим:
for (i = 0; i < a.length; i++) {
var x = {};
x[b[i]] = asign(a[i]);
hookUp(i);
}
function hookUp(index) {
x[b[index]].addEventListener('click', function() {
alert(x[b[index]].value);
}, false);
}
hookUp
использует index
(который мы не меняем), а не i
. (Я также принял предположение, при котором использовать, x[i]
или x[b[i]]
.)
Тем не менее, если ваша цель состоит в том, чтобы предупредить value
элемента, которая была нажата, используйте this
вместо:
for (i = 0; i < a.length; i++) {
var x = {};
x[b[i]] = asign(a[i]);
x[b[i]].addEventListener('click', function() {
alert(this.value);
}, false);
}
или Event#currentTarget
:
for (i = 0; i < a.length; i++) {
var x = {};
x[b[i]] = asign(a[i]);
x[b[i]].addEventListener('click', function(e) {
alert(e.currentTarget.value);
}, false);
}
Что вы хотите сказать? – Vedda
@Amstell Я хочу назначить addEventListner с идентификаторами в массиве a с переменным массивом b. – gaurav