2009-02-23 12 views
10

Tôi có một trang web ASP.NET với một RadioButtonList dữ liệu. Tôi không biết có bao nhiêu nút radio sẽ được hiển thị vào lúc thiết kế. Tôi cần phải xác định SelectedValue trên máy khách thông qua JavaScript. Tôi đã thử những điều sau đây mà không có nhiều may mắn:Làm cách nào để xác định SelectedValue của RadioButtonList trong JavaScript?

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

("câu trả lời" đang được trả lại là "không xác định") Xin hãy tha thứ ngu dốt JavaScript của tôi, nhưng những gì tôi làm sai?

Xin cảm ơn trước.

Trả lời

32

ASP.NET ám một bảng và một bó khác mark-up quanh đầu vào đài phát thanh thực tế. Sau đây nên làm việc: -

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

Câu trả lời này hoạt động tốt nhất nếu bạn không biết có bao nhiêu nút radio bạn sẽ hiển thị trên trang. Cảm ơn! –

+0

Tôi đã thực sự hy vọng cho một câu trả lời đơn giản hơn, nhưng tôi đã không thể tìm thấy bất cứ điều gì tốt hơn – TruthOf42

+0

cảm ơn bạn rất nhiều! đã giúp tôi để ngăn chặn sự nhầm lẫn của tôi :) –

1

RadioButtonList là điều khiển máy chủ ASP.NET. Điều này sẽ hiển thị HTML cho trình duyệt bao gồm nút radio bạn đang cố gắng thao tác bằng JavaScript.

Tôi khuyên bạn nên sử dụng một cái gì đó như IE Developer Toolbar (nếu bạn thích Internet Explorer) hoặc Firebug (nếu bạn thích FireFox) để kiểm tra đầu ra HTML và tìm ID của nút radio bạn muốn thao tác trong JavaScript.

Sau đó, bạn có thể sử dụng document.getElementByID("radioButtonID").checked từ JavaScript để tìm hiểu xem nút radio có được chọn hay không.

0

reasonCode.options [reasonCode.selectedIndex] .value

+0

Bạn có chắc chắn rằng reasonCode thực sự sẽ chứa trường biểu mẫu không? Tôi hy vọng nó sẽ là phần tử thùng chứa bên ngoài của RadioButtonList. – Tomalak

3

Tôi luôn xem nguồn. Bạn sẽ tìm thấy mỗi mục nút radio để có một id duy nhất bạn có thể làm việc với và lặp qua chúng để tìm ra cái nào được chọn.

Chỉnh sửa: đã tìm thấy ví dụ. Tôi có một danh sách nút radio rbSearch. Đây là trong một ascx gọi là ReportFilter. Trong View Source tôi thấy

ReportFilter1_rbSearch_0 
ReportFilter1_rbSearch_1 
ReportFilter1_rbSearch_2 

Vì vậy, bạn có thể lặp qua document.getElementById ("ReportFilter1_rbSearch_" + idx) hoặc có một câu lệnh switch, và xem cái nào đã .checked = true.

0

Từ here:

if (RadioButtonList1.SelectedIndex> -1)

{

Label1.Text = "Bạn đã chọn:" + RadioButtonList1.SelectedItem.Text;

}

+0

Các mẫu mã này là server side "runat = server". Anh ta đang tìm kiếm mã phía máy khách, tất nhiên là không tuân theo mô hình đối tượng ASP.NET. – Benry

1

HTML tương đương với ASP.NET RadioButtonList, là một tập hợp < input type = "radio"> với thuộc tính cùng tên (dựa trên tài sản ID của RadioButtonList).

Bạn có thể truy cập nhóm nút radio này bằng cách sử dụng getElementsByName. Đây là tập hợp các nút radio, được truy cập thông qua chỉ mục của chúng.

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

Tôi không biết điều đó - đẹp nhất! – MikeW

1

Đối với một 'RadioButtonList với chỉ có 2 giá trị 'có' và 'không', tôi đã làm điều này:

var chkval=document.getElemenById("rdnPosition_0") 

Đây rdnposition_0 đề cập đến id của vâng ListItem. Tôi đã nhận được nó bằng cách xem mã nguồn của biểu mẫu.

Sau đó, tôi đã chkval.kiểm tra để biết liệu giá trị 'Có' có được chọn hay không.

+1

OP nói: 'Tôi không biết có bao nhiêu nút radio sẽ được hiển thị vào lúc thiết kế' -> Vì vậy, anh ta không thể sử dụng id tĩnh như vậy, bởi vì bạn không biết có bao nhiêu phần tử sẽ có. Bây giờ _0 là 'Có' nhưng khi bạn thay đổi các nút, _0 có thể là 'Không'. Giải pháp tồi để bảo trì –

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

Hãy thử điều này để lấy giá trị đã chọn từ RadioButtonList.

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

một cách đơn giản bằng cách sử dụng jquery. cảm ơn – mRizvandi

1

tôi muốn thêm là giải pháp đơn giản nhất cho vấn đề này:

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 là tài sản đó đã cho bạn tên của các đầu vào bên trong kiểm soát, vì vậy bạn chỉ có thể kiểm tra số họ thực sự dễ dàng.

+1

Tuyệt vời, điều này làm việc tốt cho tôi, đã phải vật lộn với điều này trong một thời gian, đã có vấn đề trong việc tìm kiếm kiểm soát radiobuttonlist của tôi bởi vì nó nằm bên trong một ContentPlaceHolder làm lộn xộn ID trên rendering. Bằng cách đặt ID với việc sử dụng UniqueID hoạt động hoàn hảo. Cảm ơn. – Mana

0

Tôi đã thử nhiều cách khác nhau để xác định SelectedValue của RadioButtonList trong Javascript mà không có niềm vui. Sau đó, tôi đã xem HTML của trang web và nhận ra rằng ASP.NET hiển thị một điều khiển RadioButtonList đến một trang web dưới dạng một bảng HTML một cột!

<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> 

Để truy cập vào một ListItem riêng lẻ trên RadioButtonList qua Javascript, bạn cần tham chiếu nó trong điều khiển con của ô (được gọi là nút trong Javascript) trên hàng có liên quan. Mỗi ListItem được trả về thành phần tử đầu tiên (không) trong ô đầu tiên (số không) trên hàng của nó.

Ví dụ này vòng qua các RadioButtonList để hiển thị 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 
    } 
} 

Để chọn mục cuối cùng trong RadioButtonList, bạn sẽ làm điều này:

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

Vì vậy, tương tác với một RadioButtonList trong Javascript rất giống với làm việc với một bảng thông thường. Giống như tôi nói tôi đã thử hầu hết các giải pháp khác ngoài kia nhưng đây là giải pháp duy nhất phù hợp với tôi.

0

Tôi chỉ muốn thực thi tập lệnh ShowShouldWait nếu số Page_ClientValidatetrue. Ở cuối kịch bản, giá trị của b được trả về để ngăn sự kiện postback trong trường hợp nó không hợp lệ.

Trong trường hợp ai đó tò mò, cuộc gọi ShouldShowWait được sử dụng để chỉ hiển thị "vui lòng đợi" div nếu loại kết xuất được chọn là "HTML" chứ không phải "CSV".

onclientclick="var isGood = Page_ClientValidate('vgTrxByCustomerNumber');if(isGood){ShouldShowWait('optTrxByCustomer');} return isGood" 
Các vấn đề liên quan