在 ASP.NET WebForms 頁面中,RadioButton 渲染為 HTML <input type="radio">,但 ID 可能被修改。本文介紹原生 JS、jQuery 多種獲取選中狀態的方法,並解決 ClientID 模式差異問題。
<asp:RadioButton ID="RadioButton1" GroupName="Group1" runat="server" Text="選項1" />
<asp:RadioButton ID="RadioButton2" GroupName="Group1" runat="server" Text="選項2" />
渲染後(默認 ClientIDMode="AutoID"):
<input id="ctl00_ContentPlaceHolder1_RadioButton1" type="radio" name="ctl00$ContentPlaceHolder1$Group1" value="RadioButton1" />
<input id="ctl00_ContentPlaceHolder1_RadioButton2" type="radio" name="ctl00$ContentPlaceHolder1$Group1" value="RadioButton2" />
// 需在服務端註冊腳本或使用 <%= RadioButton1.ClientID %>
var rb1 = document.getElementById('<%= RadioButton1.ClientID %>');
if (rb1.checked) { ... }
function getSelectedRadioValue(groupName) {
var radios = document.getElementsByName(groupName);
for (var i = 0; i < radios.length; i++) {
if (radios[i].checked) return radios[i].value;
}
return null;
}
// 使用:傳入渲染後的 name 屬性值
var val = getSelectedRadioValue('ctl00$ContentPlaceHolder1$Group1');
服務端註冊 name:
string groupName = RadioButton1.GroupName; // 需手動構造完整 name
// 或直接在前端硬編碼(不推薦)
// 通過 ID 結尾匹配(需引用 jQuery)
var checked = $('input[id$="RadioButton1"]').is(':checked');
// 通過 name 分組獲取值
var val = $('input[name$="Group1"]:checked').val();
// 遍歷同組 RadioButton
$('input[name$="Group1"]').each(function() {
if (this.checked) console.log(this.value);
});
<asp:RadioButton ID="RadioButton1" ClientIDMode="Static" GroupName="Group1" runat="server" />
渲染後 ID 保持 RadioButton1,JS 直接用 document.getElementById("RadioButton1")。注意:同一頁面不能有重複 ID。
ClientIDMode="Predictable" 或 "Static" 簡化前後端交互