当通过javascript设置值时,RadioButtonList不会在后续更改事件中触发

本文关键字:事件 javascript 设置 RadioButtonList | 更新日期: 2023-09-27 18:34:34

我有一个单选按钮列表,其中包含 2 个选项作为列表项,其中包含服务器 OnSelectedIndexChanged 事件和客户端 onchange 事件。标记代码如下所示:

<asp:RadioButtonList ID="rdViewSelection" 
         runat="server" RepeatDirection="Horizontal" AutoPostBack="true"
           OnSelectedIndexChanged="rdoSelection_SelectedIndexChanged"    
           onchange="SelectedIndexChanged();">
       <asp:ListItem Enabled="true" Selected="True" 
            Text="1" Value="1"</asp:ListItem>
      <asp:ListItem Enabled="true" Selected="False" 
            Text="2" Value="2"></asp:ListItem>
</asp:RadioButtonList>

用于控件的 JavaScript 方法客户端 onchange 事件如下所示:

function SelectedIndexChanged() {
    var rdoSelection = document.getElementById("<%=rdoSelection.ClientID%>");
     for (var i = 0; i < rdoSelection.cells.length; i++) {
         for (var x = 0; x < rdoSelection.cells[i].all.length; x++) {
             if (rdoSelection.cells[i].all[x].checked) {
                 // Store value in Hidden Field
                 document.getElementById("<%=SelectedValue.ClientID%>").value = rdoSelection.cells[i].all[x].defaultValue;
             }
         }
     }
 }

我还有一个 asp:LinkButton 控件,当用户单击它时,它会执行一些服务器端操作;但除了调用的服务器方法之外,还有一个 onClientClick 方法可以更改 RadioButtonList 的选定值。

为简单起见,我删除了导致我遇到的问题的有问题的客户端代码行之外的所有内容,但它看起来像这样:

function ChangeSelectedIndex()
{
    rdoSelection.cells[1].childNodes[0].checked = true;
}

当通过从 LinkedButton 调用的客户端代码更改 RadioButtonList 的选定节点时,该值将在页面上成功更改,并且服务器 OnSelectedIndexChanged 事件将触发。

但是,如果我手动单击未选择的节点(在第一次编程更改之后(,则不会调用服务器端 OnSelectedIndexChanged 方法。但是,在此之后执行的任何选择更改都会成功调用服务器事件。就好像第一次手动更改(在客户端方法以编程方式处理的更改之后(作为服务器端事件被忽略一样。然后,之后的任何手动更改都会回退到与服务器同步。

我如何确保 RadioButtonList 的每个更改事件都会触发服务器端 OnSelectedIndexChanged 事件,为什么通过 Javascript 更改所选索引会使第二次手动更改变得毫无意义,并且功能在此之后恢复???

所有这些控件都驻留在用户控件中。

当通过javascript设置值时,RadioButtonList不会在后续更改事件中触发

如果你不设置重复方向,它应该可以工作。