Изменение параметров функции для события onkeypress в соответствии с идентификатором источника - PullRequest
1 голос
/ 06 января 2011

Я хочу назначить функцию в соответствии с их идентификатором всем полям ввода на веб-странице.Для этого я написал приведенный ниже код, но все поля ввода выполняются с ключом keyPress с одним и тем же параметром ..: (*

///////////////////Checks all available 'text' 'input's////////////////////
var inputs = document.getElementsByTagName('input');
var cnvtrInput = new Array();
for (var index = 0; index < inputs.length; index++) {
 if (inputs[index].type == 'text') {
  cnvtrInput[index] = new converter(inputs[index]);
  inputs[index].onkeypress = function() {return keyPess(cnvtrInput[index])};
 }
}
//index--;

С последним закомментированным утверждением я обнаружил, что передающий элемент keyPress является последним значением индекса;

Наконец-то я попробовал то же самое с textareas, но не смог ...

1 Ответ

3 голосов
/ 06 января 2011

Вы создаете функции в цикле, который всегда сложен.После завершения цикла index будет иметь значение inputs.length, и ваш обратный вызов ссылается на index.Но это также не сработает, если вы определите новую переменную в цикле, поскольку JavaScript не имеет области видимости блока, только область действия функции.
Вы должны захватить значение в новой области видимости, например, с помощью непосредственной функции:

inputs[index].onkeypress = (function(value) {
    return function() {return keyPess(value)};
}(cnvtrInput[index]));
...