代码之家  ›  专栏  ›  技术社区  ›  Wayne Austin

当单选按钮runat=“server”时使用jquery检查单选按钮?

  •  5
  • Wayne Austin  · 技术社区  · 16 年前

    使用jquery,我希望能够单击一个元素,该元素还将检查它的相关单选按钮。在我们必须将runat=“server”添加到单选按钮之前,我一直使用它。

    当我应用它时,它会阻止我的jquery函数工作,我无法理解如何绕过它,下面是代码的简化版本:

    HTML

    <input type="radio" runat="server" id="sector1Radio" name="SectorGroup" title="Sector1" />
    

    JQuery

    $('#SomethingElse').click(function() {
        $('input[title=Sector1]').attr('checked','checked');
    });
    

    我发现,当它转换为.NET控件而不是选中“checked”(通常是这样)时,它只是被选中,因此我更改了,但在多个浏览器中检查DOM时,没有检查任何单选按钮:-(

    是否有其他方法可以使用jquery检查runat=“server”的单选按钮?

    干杯!

    8 回复  |  直到 14 年前
        1
  •  2
  •   Andreas Paulsson    16 年前

    我认为您的问题是输入的ID不再是Sector1无线电,而是CTL00 U Sector1无线电或类似的东西。如果输入控件位于内部,例如ContentPlaceholder控件(使用母版页时),则会发生这种情况。

    您可以检查生成的HTML代码(在浏览器中)以验证是否是这种情况吗?输入控件的ID是什么?

    如果是这种情况,则需要生成JSJQuery代码

    $('#SomethingElse').click(function() {
      $('input[title=Sector1]').attr('checked','checked');
    });
    

    从codebehind,以便用控件的clientID替换某些thingle。

        2
  •  1
  •   mikemerce    16 年前

    .IS(“:选中”)用于ASP.NET单选按钮和复选框

    $('#SomethingElse').click(function() {
        $('input[title=Sector1]').is(':checked');
    });
    
        3
  •  0
  •   bevacqua    16 年前

    试用使用

    $('input[title=Sector1]').attr('checked',true);
    

    $('input[title=Sector1]').attr('checked',false);
    

    或者也许

    $('#SomethingElse').click(function () {
        $('input[title=Sector1]').attr('checked',!$('input[title=Sector1]').attr('checked'));
    });
    
        4
  •  0
  •   Mouhannad    16 年前

    正如其他人建议的那样,ASP.NET不会生成具有您指定的相同ID的HTML。

    快速解决方案:

    • 您可以继续使用该ID,但要求jquery检查该ID的结尾,例如:

      $(“input[id$='Sector1Radio']”)。是(“:选中”);

    • 或者根据NICO的建议核对标题和姓名。

    • 使用不受ASP.NET影响的类元素,例如

      <input type=“radio”runat=“server”id=“Sector1Radio”class=“Sector1Radio”name=“SectorGroup”title=“Sector1”/>gt;

      $(“input.sector1radio”).is(“:checked”);

    最好的方法是查看生成的HTML代码并查看给出的ID,然后可以使用适当的jquery选择器,因为生成的ID可能具有不同的扩展名,这取决于是否使用母版页等。

        5
  •  0
  •   jon3laze    16 年前

    如果您正在使用母版页或动态创建控件,则很可能控件ID被重命名为“someThinglese”成为“mainContent”或“someThinglese”。

    检查这一点的最简单方法是使用用于Firefox或Chrome的WebDeveloper插件。 转到信息->显示元素信息,然后选择相关对象。它会给你它的ID,类,以及祖先和孩子的信息。 检查.NET是否动态更改了ID。

    如果是这样的话:

    为了防止这种情况发生,在服务器端代码中,可以使用以下属性创建静态ID

    SomethingElse.ClientIDMode = ClientIDMode.Static;
    

    然后可以在jquery中引用

    $('#SomethingElse').click(function() {
                if ($('input[title=Sector1]').attr('checked')) {
                 //execute event
    });
    
        6
  •  0
  •   Carlos Martinez T.    16 年前

    我认为在ASP NET复选框和单选按钮中,会在输入后生成一个“输入”和一个“跨度”。所以您只需要选择输入。

    你可以试试:

    $('.classname input[type=checkbox]').each(function() {
            this.checked = true;
    });
    
        7
  •  0
  •   Steven Raines    15 年前

    这里有两件事:找到控件并执行检查。在ASP.NET中,控件的实际ID和名称最终将根据显示它的runat=“server”容器进行更改,即使这些容器没有ID。

    呈现的ASP.NET控件始终以与开始时相同的名称结尾,因此标记如下:

    <input type="radio" runat="server" id="sector1Radio" title="Sector1" />
    

    可能最终被渲染为

    <input type="radio" runat="server" id="ctl0$ctl0$sector1Radio" name="ctl0_ctl0_SectorGroup" title="Sector1" />
    

    即使在jquery中使用了“contains”选择语法,也可以在呈现之后找到该元素。因此,要找到这个元素,渲染后,可以使用:

    $("input[type='radio'][id*='$sector1Radio']")
    

    此语法将找到ID包含“$Sector1Radio”的任何单选按钮。

    一旦拥有了元素,就可以使用下面的代码来选中或取消选中它,这是您从另一个元素的click事件中调用的代码。

    // check the radio button
    $("input[type='radio'][id*='$sector1Radio']").attr('checked', true);    
    
    // uncheck the radio button
    $("input[type='radio'][id*='$sector1Radio']").attr('checked', false);   
    

    最后一件事…如果您只希望一块文本在按下时单击按钮(将其包装在标记中,并将AssociatedControlID属性设置为单选按钮的控件名称,如下所示…

    <input type="radio" runat="server" id="sector1Radio" title="Sector1" />
    <asp:label runat="server" id="lblsector1Radio" associatedControlID="sector1Radio">clicking here clicks and unclicks the radio button</asp:label>
    
        8
  •  0
  •   Alfred redcoder    14 年前

    我也有同样的问题。使用jquery用户界面 radiobuttons 很好的一个必须写:

    <div id="radio">
    <input type="radio" id="radio1" runat="server" />
    <label for="radio1">The label of the radio button</label>
    ...
    </div>
    
    <script type="text/javascript">
    $('#radio').buttonset();
    </script>
    

    标签的for属性必须正确引用输入标记的ID。如果网页位于母版页内,则输入标记的ID将被修改为 ctl00_Something_radio1 ,突然,标签的for属性不再引用输入标记。在ASP.NET中要注意这一点!