jQuery 复选框启用/禁用单选按钮列表。

3

我有一个复选框和一个禁用的单选按钮列表在同一行的不同 td 中,并尝试在选中/取消选中复选框时启用/禁用它。

<tr class = "main">
    <td colspan="2">
      <input id="CheckOne" type="checkOne" name="checkOne" />
      <label for="CheckOne">Some Text</label>
    </td>
    <td align="center">
        <table id="RadioButtonListOne" disabled="disabled" title="Choices" border="0">
        <tr>
         <td>
                    <span disabled="disabled">
                    <input id="RadioButtonListOne_0" type="radio" name="RadioButtonListOne" value="Y" disabled="disabled" />
                    <label for="RadioButtonListOne_0">Yes</label></span>
               </td>
               <td>
                    <span disabled="disabled"><input id="RadioButtonListOne_1" type="radio" name="RadioButtonListOne" value="N" disabled="disabled" />
                    <label for="RadioButtonListOne_1">No</label>
                    </span>
               </td>       
           </tr>
        </table>
     </td>
  </tr>

这是原始的服务器端HTML代码样式:
   <tr class = "main">
       <td colspan="2">
            <asp:CheckBox ID="CheckBoxOne" runat="server" Text="Some Text"/>
       </td>
       <td align="center">
            <asp:RadioButtonList ID="RadioButtonListOne" RepeatDirection="Horizontal">
                  <asp:ListItem Value="Y">Yes asp:ListItem>
                  <asp:ListItem Value="N">No</asp:ListItem>
             </asp:RadioButtonList>
        </td>
   </tr>

由于某些原因,当我尝试做一些显而易见的事情时,比如:

    $('#<%= CheckBoxOne.ClientID %>').click(function()
    {
        if ($(this).is(":checked"))
        {
             $('#<%= RadioButtonListOne.ClientID%> input:radio').removeAttr('disabled');

        }
        else 
        {
              $('#<%= RadioButtonListOne.ClientID%> input:radio').attr('disabled', 'disabled');
        }
    });

代码逻辑上看应该可以正常运行,但实际却不起作用。我哪里出错了?


你好, 你的控件是在服务器端吗?标记中没有任何 runat="server" 属性,这意味着 <%= CheckOne.ClientID %> 绝对行不通。如果上面的内容只是伪代码,请你能否发布你的实际代码?这样可能会更容易确定确切的问题。 - KP.
是的,它们是可以的。如果这样更容易理解,我可以发布一个服务器端的HTML文件。 - Victor
2个回答

1
为什么你在你的jquery代码中包含了<%= RadioButtonListOne.ClientID% input:radio,同时你忘记加上结尾的>符号。
$('#<%= RadioButtonListOne.ClientID%> input:radio').removeAttr('disabled');

您的jQuery代码是否在同一页中,以便在客户端下载之前由服务器处理?类似<%= RadioButtonListOne.ClientID%>这样的内容无法在php、asp或html.erb等文件之外使用。

您可以尝试将if检查更改为以下内容

if ($(this).attr('checked') == 'checked') 

使用 .is(':checked') 的替代方法


0

你的复选框ID是“CheckOne”:

<input id="CheckOne" type="checkOne" name="checkOne" />

但是你的代码看起来像是在引用一个(很可能是)数值:

$('#<%= CheckOne.ClientID %>').click(function()

你的复选框 ID 应该与客户端的 ID 匹配:

<input id="<%= CheckOne.ClientID %>" type="checkOne" name="checkOne" />

或者

<input id="CheckOne_<%= CheckOne.ClientID %>" type="checkOne" name="checkOne" />

使用经过调整的jQuery

$('#CheckOne_<%= CheckOne.ClientID %>').click(function()

单选按钮的ID存在类似的问题。

是的,这是一个内容页面,为了避免过长的名称,我将它们稍微简化了一下,还请参考上面的原始HTML。 - Victor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接