Как я могу определить SelectedValue RadioButtonList в JavaScript?

У меня есть веб-страница ASP.NET с привязанным к данным RadioButtonList. Я не знаю, сколько переключателей будет отображаться во время разработки. Мне нужно определить SelectedValue на клиенте через JavaScript. Я пробовал следующее без особой удачи:

var reasonCode = document.getElementById("RadioButtonList1");
var answer = reasonCode.SelectedValue;  

(«ответ» возвращается как «неопределенный»). Пожалуйста, простите мое незнание JavaScript, но что я делаю неправильно?

Заранее спасибо.


person Bob OMalley    schedule 23.02.2009    source источник


Ответы (12)


ASP.NET отображает таблицу и кучу другой разметки вокруг фактических радиовходов. Следующее должно работать: -

 var list = document.getElementById("radios"); //Client ID of the radiolist
 var inputs = list.getElementsByTagName("input");
 var selected;
 for (var i = 0; i < inputs.length; i++) {
      if (inputs[i].checked) {
          selected = inputs[i];
          break;
       }
  }
  if (selected) {
       alert(selected.value);
  }
person John Foster    schedule 23.02.2009
comment
Этот ответ работает лучше всего, если вы не знаете, сколько переключателей будет отображаться на странице. Спасибо! - person Bob OMalley; 24.02.2009
comment
Я действительно надеялся на более простой ответ, но я не смог найти ничего лучше - person TruthOf42; 04.06.2014
comment
большое спасибо! помог мне остановить мое замешательство :) - person Golnaz Saraji; 17.03.2015
comment
неплохо @Джон Фостер. мне помогло даже спустя 11 лет - person kashif; 18.08.2020

Попробуйте это, чтобы получить выбранное значение из RadioButtonList.

var selectedvalue = $('#<%= yourRadioButtonList.ClientID %> input:checked').val()
person Zara    schedule 18.12.2012
comment
Он попросил javascript. Jquery намного проще и короче в написании. Ваш ответ бесполезен для людей, которые хотят сделать это через javascript. Я не отрицаю ваш ответ, но придерживаюсь вопроса. - person Sandeep Kushwah; 15.07.2018

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

Изменить: нашел пример. У меня есть список переключателей rbSearch. Это в ascx называется ReportFilter. В View Source я вижу

ReportFilter1_rbSearch_0
ReportFilter1_rbSearch_1
ReportFilter1_rbSearch_2

Таким образом, вы можете либо перебрать document.getElementById("ReportFilter1_rbSearch_" + idx ), либо использовать оператор switch и посмотреть, какой из них имеет .checked = true.

person MikeW    schedule 23.02.2009

RadioButtonList — это серверный элемент управления ASP.NET. Это отображает HTML в браузере, который включает переключатель, которым вы пытаетесь манипулировать с помощью JavaScript.

Я бы рекомендовал использовать что-то вроде панели инструментов разработчика IE (если вы предпочитаете Internet Explorer) или Firebug (если вы предпочитаете FireFox), чтобы проверить вывод HTML и найти идентификатор переключателя, которым вы хотите управлять в JavaScript.

Затем вы можете использовать document.getElementByID("radioButtonID").checked из JavaScript, чтобы узнать, выбран ли переключатель или нет.

person Richard Ev    schedule 23.02.2009

HTML-эквивалент ASP.NET RadioButtonList представляет собой набор ‹input type="radio"> с тем же атрибутом имени (на основе свойства ID RadioButtonList).

Вы можете получить доступ к этой группе переключателей, используя getElementsByName. Это набор переключателей, доступ к которым осуществляется через их индекс.

alert( document.getElementsByName('RadioButtonList1') [0].checked );
person baretta    schedule 23.02.2009
comment
Я не знал, что - хороший! - person MikeW; 24.02.2009

Для «RadioButtonList» только с двумя значениями «да» и «нет» я сделал это:

var chkval=document.getElemenById("rdnPosition_0")

Здесь rdnposition_0 относится к идентификатору да ListItem. Я получил его, просмотрев исходный код формы.

Затем я сделал chkval.checked, чтобы узнать, проверено ли значение «Да».

person Ashwin Kavale    schedule 07.07.2010
comment
ОП сказал: «Я не знаю, сколько переключателей будет отображаться во время разработки». Поэтому он не может использовать такие статические идентификаторы, потому что вы не знаете, сколько элементов будет. Теперь _0 — это «Да», но когда вы меняете кнопки, _0 может быть «Нет». Плохое решение для ремонтопригодности - person Erik Dekker; 22.12.2011

Я хотел бы добавить самое простое решение этой проблемы:

var reasons= document.getElementsByName("<%=RadioButtonList1.UniqueID%>");
var answer;
for (var j = 0; j < reasons.length; j++) {
    if (reason[j].checked) {
        answer = reason[j].value;
    }
}

UniqueID — это свойство, которое дало вам имя входных данных внутри элемента управления, поэтому вы можете просто проверить их очень легко.

person Giulio Caccin    schedule 28.02.2013
comment
Удивительно, у меня это отлично сработало, я уже некоторое время борюсь с этим, у меня были проблемы с поиском моего элемента управления списком радиокнопок, потому что он находился внутри ContentPlaceHolder, который искажал идентификатор при рендеринге. Установка идентификатора с использованием UniqueID сработала отлично. Спасибо. - person Mana; 05.07.2017

Я пробовал различные способы определения SelectedValue RadioButtonList в Javascript без радости. Затем я посмотрел на HTML-код веб-страницы и понял, что ASP.NET отображает элемент управления RadioButtonList на веб-странице в виде HTML-таблицы с одним столбцом!

<table id="rdolst" border="0">
  <tr>
    <td><input id="rdolst_0" type="radio" name="rdolst" value="Option 1" /><label for="rdolst_0">Option 1</label></td>
  </tr>
  <tr>
    <td><input id="rdolst_1" type="radio" name="rdolst" value="Option 2" /><label for="rdolst_1">Option 2</label></td>
  </tr>
</table>

Чтобы получить доступ к отдельному ListItem в RadioButtonList через Javascript, вам необходимо сослаться на него в дочерних элементах управления ячейки (известных как узлы в Javascript) в соответствующей строке. Каждый ListItem отображается как первый (нулевой) элемент в первой (нулевой) ячейке своей строки.

Этот пример перебирает RadioButtonList для отображения SelectedValue:

var pos, rdolst;

for (pos = 0; pos < rdolst.rows.length; pos++) {
    if (rdolst.rows[pos].cells[0].childNodes[0].checked) {
        alert(rdolst.rows[pos].cells[0].childNodes[0].value);
        //^ Returns value of selected RadioButton
    }
}

Чтобы выбрать последний элемент в RadioButtonList, вы должны сделать следующее:

rdolst.rows[rdolst.rows.length - 1].cells[0].childNodes[0].checked = true;

Таким образом, взаимодействие с RadioButtonList в Javascript очень похоже на работу с обычной таблицей. Как я уже сказал, я пробовал большинство других решений, но это единственное, которое работает для меня.

person Bondy    schedule 04.10.2013

Я хотел выполнить сценарий ShowShouldWait, только если Page_ClientValidate был true. В конце скрипта возвращается значение b, чтобы предотвратить событие postback в случае, если оно недействительно.

Если кому-то интересно, вызов ShouldShowWait используется только для отображения «пожалуйста, подождите» div, если выбран тип вывода «HTML», а не «CSV».

onclientclick="var isGood = Page_ClientValidate('vgTrxByCustomerNumber');if(isGood){ShouldShowWait('optTrxByCustomer');} return isGood"
person Joe Schmucker    schedule 07.09.2016

Чтобы проверить выбранный индекс раскрывающегося списка в JavaScript:

function SaveQuestion() {
    var ddlQues = document.getElementById("<%= ddlQuestion.ClientID %>");
    var ddlSubQues = document.getElementById("<%=ddlSecondaryQuestion.ClientID%>");

    if (ddlQues.value != "" && ddlSubQues.value != "") {
        if (ddlQues.options[ddlQues.selectedIndex].index != 0 ||
            ddlSubQues.options[ddlSubQues.selectedIndex].index != 0) {
            return true;
        } else {
            return false;
        }
    } else {
        alert("Please select the Question or Sub Question.");
        return false;
    }
}
person chenna    schedule 28.02.2019

Из здесь:

if (RadioButtonList1.SelectedIndex > -1) 
{
    Label1.Text = "You selected: " + RadioButtonList1.SelectedItem.Text;
}
person Sergey Galashyn    schedule 23.02.2009
comment
Эти образцы кода являются runat=server на стороне сервера. Он ищет клиентский код, который, конечно же, не соответствует объектной модели ASP.NET. - person Benry; 24.02.2009

person    schedule
comment
Вы уверены, что ReasonCode действительно будет содержать поле формы? Я ожидаю, что это будет элемент внешнего контейнера RadioButtonList. - person Tomalak; 24.02.2009