У меня есть массив флажков, которые я передаю функции с намерением настроить прослушиватель для каждого поля.

На данный момент все, что я хочу, чтобы слушатель сделал, это отобразил идентификатор и значение каждого флажка в окне предупреждения. Оба атрибута были установлены перед передачей в эту функцию.

Массив создается, а затем передается с помощью следующей строки:

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
user3932611 1 Дек 2014 в 19:29
 – 
Dimag Kharab
1 Дек 2014 в 19:33
1
Вы не назначаете функцию (с помощью pCheckBoxListener(pCheckBoxes[i])), вы вызываете функцию. Между прочим, отладить это было бы намного проще, если бы вы включили достаточно кода для воспроизведения проблемы (см.: "MCVE"), и предлагая "фрагмент стека", или ссылка на [JS Fiddle(jsfiddle.net) или аналогичный демонстрационный сайт будет полезным бонусом. .
 – 
David Thomas
1 Дек 2014 в 19:34

2 ответа

Согласно комментарию Дэвида, вам нужно назначить обработчик событий, а не вызывать функцию в вашем цикле.

http://jsfiddle.net/qfbee5ot/

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);
}
1
Slippery Pete 1 Дек 2014 в 19:42

Вы можете добавить прослушиватель событий щелчка в свой customMultiSelect для всех ваших флажков:

function customMultiSelect(pCheckBoxes)
{
    for (var i = 0; i < pCheckBoxes.length; i++) {
        pCheckBoxes[i].addEventListener('click', function () {
            pCheckBoxListener(this);
        });
    }
}

См. демонстрацию.

0
dreyescat 1 Дек 2014 в 19:56