使用 jQuery 从 asp:RadioButtonList 获取所选值的属性

Getting attribute for selected value from asp:RadioButtonList with jQuery

我正在维护一些旧的 c# 代码,并且有一个 asp:RadioButtonList...

<asp:RadioButtonList AutoPostBack="false" TextAlign="Right" RepeatDirection="Horizontal" RepeatLayout="Flow" runat="server" ID="radIncidentType" />

... 像这样填充在后面的代码中:

    public static void PopulateRBL(string ListName, ref RadioButtonList ListToPopulate)
    {
        List<Lookup> radioList = GetLookup(ListName);  //returns
        foreach (Lookup entry in radioList)
        {
            ListItem item = new ListItem(" " + entry.Description + " ", entry.Code);
            item.Attributes.Add("ItemId", entry.Id.ToString());
            ListToPopulate.Items.Add(item);
        }
    }

所以每个添加的项目都有一个描述、一个代码和一个额外的属性ItemId

然后对必须询问 ItemId 属性的 onChange 执行一些验证。目前是这样的:

$('#ctl00_cphPage_radIncidentType input[type=radio]:checked').closest('span').attr('ItemId')

在我添加嵌套母版页并使其正常工作之前,它工作正常,我不得不将选择器更改为:

$('#ctl00_ctl00_cphPage_nestedPage_radIncidentType input[type=radio]:checked').closest('span').attr('ItemId')

显然我想要一个更整洁的选择器,我试过了:

$('#<%= radIncidentType.ClientID %> input[type=radio]:checked').closest('span').attr('ItemId')

和...

$("input[name='<%=radIncidentType.UniqueID%>']:radio:checked").closest('span').attr('ItemId')

...但都不起作用。谁能建议一种获取 ItemId 属性值的方法?

想要ItemId的值时不是很清楚。但是在这个片段中,一个侦听器被添加到 RadioButtonList 并在单击 RadioButton 时获取属性。

<script type="text/javascript">
    $('#<%= radIncidentType.ClientID %> input[type="radio"]').click(function () {
        var ItemId = $(this).closest('span').attr("ItemId");
        alert(ItemId);
    });
</script>

或外部触发的函数从选定的 RadioButton 获取属性。

<script type="text/javascript">
    function getItemIdFromRadioButtonList() {
        $('#<%= radIncidentType.ClientID %> input[type="radio"]:checked').each(function () {
            var ItemId = $(this).closest('span').attr("ItemId");
            alert(ItemId);
        });
    }
</script>

我尝试了以下方法并且效果如愿...

$("[id$='_radIncidentType'] input[type=radio]:checked").closest('span').attr("ItemId")