Как получить значения чекбоксов в JavaScript на веб-форме

У меня есть список чекбоксов на ASP.NET веб-форме, который я заполняю динамически из массива. Через JavaScript мне нужно проходить по всем значениям и при выборе определенного пункта показывать другие элементы на странице.

Проблема в том, что все значения чекбоксов отображаются как ‘on’ вместо реальных значений, которые я установил. Как мне получить настоящие значения для каждого чекбокса?

Мой JavaScript код:

var checkboxElements = document.getElementById(CheckboxContainer);
var inputs = checkboxElements.getElementsByTagName('input');

for(var j = 0; j < inputs.length; j++) {
    if(inputs[j].value == "Другое") {
        if(inputs[j].checked) {
            var additionalBlock = document.getElementById('<%=additionalControls.ClientID%>');
            additionalBlock.style.display = 'block';
        }
    }
}

Проблемная строка: if(inputs[j].value==“Другое”) - в отладчике значения показываются как ‘on’, а не те, что я задал.

Сгенерированный HTML выглядит так:

<span id="ctl00_MainContent_Form1_categoryList" class="checkboxList" onChange="validateForm();" onClick="handleSelection('ctl00_MainContent_Form1_categoryList');">
  <input id="ctl00_MainContent_Form1_categoryList_0" type="checkbox" name="ctl00$MainContent$Form1$categoryList$0"/>
  <label for="ctl00_MainContent_Form1_categoryList_0">Вариант1</label>
  <input id="ctl00_MainContent_Form1_categoryList_1" type="checkbox" name="ctl00$MainContent$Form1$categoryList$1"/>
  <label for="ctl00_MainContent_Form1_categoryList_1">Вариант2</label>
  <input id="ctl00_MainContent_Form1_categoryList_2" type="checkbox" name="ctl00$MainContent$Form1$categoryList$2"/>
  <label for="ctl00_MainContent_Form1_categoryList_2">Вариант3</label>
</span>

Похоже, проблема в том, что у ASP.NET чекбокса нет атрибута value по умолчанию. Пробую обходной путь через получение текста чекбокса на сервере.

Да, дело в том, что у чекбоксов нет атрибута value. Попробуй inputs[j].nextElementSibling.textContent - так получишь текст из label. Или просто задай value при создании чекбокса на сервере. Как генеришь чекбоксы - через CheckBoxList или вручную?

В твоем HTML у чекбоксов нет атрибута value - поэтому получается ‘on’. Попробуй брать значение из соседнего label: var labelText = inputs[j].nextSibling.nextSibling.textContent; и сравнивай с “Другое”. Или ещё проще - задай value прямо в коде где создаёшь CheckBoxList.

Проблема в том, что ASP.NET не ставит value для чекбоксов сам. Два варианта: либо задай item.Value = "твое_значение" на сервере, либо в JS бери текст через inputs[j].nextElementSibling.innerText из label. Второй способ проще, если HTML не трогаешь.