Событие javascript onchange, вызывающее функцию с несколькими аргументами - PullRequest
0 голосов
/ 14 марта 2012

У меня проблемы со следующим кодом: у меня n номеров блока выбора, чьи идентификаторы различаются по значениям, которые принимают переменные ModName и level:

container.innerHTML = '<form id="listToolForm_'+ModName+level+'"><select id="listToolSelect_'+ModName+level+'" onChange="selValue(this.selectedIndex,'+ModName'+, level)"><option value="0">---</option></select></form>';

Затем заполняется поле выборапо значениям, взятым из базы данных (эта часть здесь не очень актуальна).С каждой формой есть скрытый ввод с id = idArg'+ModName+'_lev'+level, который будет хранить выбранный пользователем индекс, используя onChange и функцию selValue (x): вот функция selValue(index, ModName, level):

function selValue(index, ModName, level){
    document.getElementById("idArg"+ModName+"_lev"+level).value = index;
}

Я попробовал установить скрипт var ModName = "SL" и var level = 0.Я получаю ошибку: «SL не определен».Другой работающий тест состоит в замене функции, которая запускает onChange:

onChange="selValue(this.selectedIndex)"

и

function selValue(index){
    var level = 0;
    var ModName = "SL";
    document.getElementById("idArg"+ModName+"_lev"+level).value = index;
}

Так что, если функция, запущенная onChange, имеет один аргумент, код работает,но не при использовании нескольких аргументов.Я подозреваю, что это из-за строки:

onChange = "selValue(this.selectedIndex,'+ModName'+, level)"

Я пытался:

onChange="'+window["selValue"](this.selectedIndex, ModName, level)+'"

без успеха.

1 Ответ

1 голос
/ 14 марта 2012

Следующее (я предположил, '+ModName'+ было опечаткой в ​​вопросе, а не в самом коде):
onChange="selValue(this.selectedIndex, ' + ModName + ', level)"
заставляет JavaScript заменить ModName его значением, что приводит к фактическому HTML:
onChange="selValue(this.selectedIndex, SL, level)"
При обработке события onChange механизм JavaScript «думает», что SL является переменной (отсюда и ошибка), но вы действительно хотите, чтобы она была строкой (если я правильно понял).

Чтобы превратить SL в строку, вы должны заключить ее в одинарные кавычки. Для этого вам понадобится escape-последовательность \', так как вы уже используете вложенные кавычки. Просто замените:
onChange="selValue(this.selectedIndex, ' + ModName + ', level)"
с:
onChange="selValue(this.selectedIndex, \'' + ModName + '\', level)"

Кроме того, вы не имели в виду:
onChange="selValue(this.selectedIndex, \'' + ModName + '\', ' + level + ')"

...