2009-02-23 3 views
10

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

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

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

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

ответ

32

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); 
    } 
+0

Этот ответ работает лучше всего, если вы не знаете, сколько радиокнопок вы выведете на странице. Спасибо! –

+0

Я действительно надеялся на более простой ответ, но мне не удалось найти ничего лучшего – TruthOf42

+0

большое вам спасибо! помог мне остановить мое замешательство :) –

1

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

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

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

0

reasonCode.options [reasonCode.selectedIndex] .value

+0

Вы уверены, что reasonCode на самом деле будет содержать поле формы? Я бы предположил, что это внешний элемент контейнера в RadioButtonList. – Tomalak

3

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

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

ReportFilter1_rbSearch_0 
ReportFilter1_rbSearch_1 
ReportFilter1_rbSearch_2 

Таким образом, вы можете либо петли через document.getElementById («ReportFilter1_rbSearch_» + IDX) или есть переключатель заявление, и посмотреть, что один имеет .Checked = верно.

0

here От:

, если (RadioButtonList1.SelectedIndex> -1)

{

Label1.Text = "Вы выбрали:" + RadioButtonList1.SelectedItem.Text;

}

+0

Эти образцы кода являются серверной стороной «runat = server». Он ищет код на стороне клиента, который, конечно, не следует объектной модели ASP.NET. – Benry

1

HTML эквивалентно ASP.NET RadioButtonList, представляет собой набор < входного типа = «радио»> с тем же именем атрибута (на основе ID собственности RadioButtonList).

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

alert(document.getElementsByName('RadioButtonList1') [0].checked); 
+0

Я этого не знал - хороший! – MikeW

1

Для «RadioButtonList только с 2 значений 'да' и 'нет', я сделал это:

var chkval=document.getElemenById("rdnPosition_0") 

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

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

+1

OP сказал: «Я не знаю, сколько радио-кнопок будет отображаться во время разработки» -> Таким образом, он не может использовать статический идентификатор, потому что вы не знаете, сколько элементов будет. Теперь _0 «Да», но когда вы меняете кнопки, _0 может быть «Нет». Плохое решение для ремонтопригодности –

1
function CheckRadioListSelectedItem(name) { 

    var radioButtons = document.getElementsByName(name); 
    var Cells = radioButtons[0].cells.length; 

    for (var x = 0; x < Cells; x++) { 
     if (document.getElementsByName(name + '_' + x)[0].checked) { 
      return x; 
     } 
    } 

    return -1; 
} 
7

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

var selectedvalue = $('#<%= yourRadioButtonList.ClientID %> input:checked').val() 
+0

его простой способ с помощью jquery. спасибо – mRizvandi

1

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

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 является имущество, которое дал вам имя входов внутри элемента управления, так что вы можете проверить их на самом деле без труда.

+1

Удивительно, это сработало хорошо для меня, с этим борется уже какое-то время, у меня проблемы с поиском моего управления radioobuttonlist, потому что он находился внутри ContentPlaceHolder, который испортил идентификатор при рендеринге. Установив идентификатор с помощью UniqueID, он отлично работал. Благодарю. – Mana

0

Я пробовал различные способы определения 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 очень похоже на работу с обычной таблицей. Как я уже сказал, я пробовал большинство других решений, но это единственное, что работает для меня.

0

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

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

onclientclick="var isGood = Page_ClientValidate('vgTrxByCustomerNumber');if(isGood){ShouldShowWait('optTrxByCustomer');} return isGood"