У меня есть массив флажков, которые я передаю функции с намерением настроить прослушиватель для каждого поля.
На данный момент все, что я хочу, чтобы слушатель сделал, это отобразил идентификатор и значение каждого флажка в окне предупреждения. Оба атрибута были установлены перед передачей в эту функцию.
Массив создается, а затем передается с помощью следующей строки:
var oCustomMultiSelect = new customMultiSelect(oCheckBoxes);
Затем прослушиватели активируются с использованием следующего метода:
function customMultiSelect(pCheckBoxes)
{
for (i = 0; i < pCheckBoxes.length; i++) {
pCheckBoxListener(pCheckBoxes[i])
}
}
И это метод, который должен настроить слушателей:
function pCheckBoxListener(pCheckBox)
{
alert("Value " + pCheckBox.value + " ID " + pCheckBox.id);
}
Метод, который у меня есть до сих пор, будет отображать правильные значения, но не по щелчку, он отображает их во время построения. Я хочу, чтобы он отображал их при нажатии.
Я предполагаю, что это очень простая проблема, но я не могу найти правильный способ добиться этого.
2 ответа
Согласно комментарию Дэвида, вам нужно назначить обработчик событий, а не вызывать функцию в вашем цикле.
var oCheckBoxes = document.getElementsByName("cb");
var oCustomMultiSelect = new customMultiSelect(oCheckBoxes);
function customMultiSelect(pCheckBoxes) {
for (i = 0; i < pCheckBoxes.length; i++) {
//pCheckBoxListener(pCheckBoxes[i])
addEventHandler(pCheckBoxes[i], pCheckBoxListener);
}
}
function addEventHandler(element, func) {
if (element.addEventListener) {
element.addEventListener("click", func, false);
} else {
element.attachEvent('onclick', func);
}
}
function pCheckBoxListener(e) {
var pCheckBox = e.target;
alert("Value " + pCheckBox.value + " ID " + pCheckBox.id);
}
Вы можете добавить прослушиватель событий щелчка в свой customMultiSelect
для всех ваших флажков:
function customMultiSelect(pCheckBoxes)
{
for (var i = 0; i < pCheckBoxes.length; i++) {
pCheckBoxes[i].addEventListener('click', function () {
pCheckBoxListener(this);
});
}
}
См. демонстрацию.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.
pCheckBoxListener(pCheckBoxes[i])
), вы вызываете функцию. Между прочим, отладить это было бы намного проще, если бы вы включили достаточно кода для воспроизведения проблемы (см.: "MCVE"), и предлагая "фрагмент стека", или ссылка на [JS Fiddle(jsfiddle.net) или аналогичный демонстрационный сайт будет полезным бонусом. .