当单选按钮runat =“server”时用jQuery检查一个单选按钮?

问题描述:

使用jQuery我希望能够点击一个元素,它也会检查它的相关单选按钮。我有这个工作正常,直到我们必须添加runat =“服务器”到单选按钮。当单选按钮runat =“server”时用jQuery检查一个单选按钮?

当我将此它可以防止工作我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 =“checked”(就像它通常那样),它只是被检查,所以我改变了它,但在检查在多个浏览器的DOM中,我的单选按钮没有被检查:-(

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

干杯!

+1

添加中用runat =“服务器”应该不会影响你的代码。你也该属性添加到“SomethingElse”元素,因为它可能会改变所呈现的ID? – Paddy 2010-08-10 14:40:47

+0

啊,我没认为它会影响它,我没有将它添加到'SomethingElse',这是一个锚标签,如果有帮助吗? – 2010-08-10 14:45:57

+1

@ wyane我刚测试过的属性runat =“s erver“,它似乎工作正常...看起来像一个冲突,你在同一页面中使用任何其他的JavaScript框架? – manraj82 2010-08-10 15:27:11

我觉得你的问题是,输入的ID不再sector1Radio而是ctl00_sector1Radio或类似的东西。如果您的输入控件位于例如一个ContentPlaceHolder控件(使用母版页时)。

你能检查生成的HTML代码(在浏览器中)来验证是否是这种情况?输入控件的标识是什么?

如果是这样的话,你需要生成你的js jQuery代码

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

使SomeThingElse被替换为控制客户端ID。

+0

$('#')。click(function(){('input [title = Sector1]')。attr('checked',' '; }); 更好的方法是使用$('#[id $ ='SomethingElse']') – Khodor 2011-04-26 14:57:42

我有同样的问题。要使用jQuery UI的,让您的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> 

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

+0

我的答案严重失真:( – 2010-08-30 13:46:18

。是(“:勾选”)适用于ASP.NET单选按钮和复选框

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

尝试使用

$('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')); 
}); 

正如其他人的建议,ASP.net不会产生与你指定的相同ID的HTML。

快速的解决方案:

  • 您可以继续使用该ID,但要求jQuery来检查ID的结束,而不是,例如:

    $(“输入[ID $ = 'sector1Radio'] “)。是(”:检查“);

  • 或检查针对的标题和名称尼科建议

  • 使用类元件,其不被ASP.net实现,例如

    < INPUT TYPE =“无线电” RUNAT =“服务器” (“input.sector1Radio”)is(“:checked”);(“input.sector1Radio”);(=“sector1Radio”)class =“sector1Radio”name =“SectorGroup”title =“Sector1”/ >

最好的办法是查看生成的HTML代码,看看ID是给你的,那么你可以使用适当的jQuery选择,因为生成的ID可能有不同的扩展名取决于您是否使用母版页等。

如果您正在使用MasterPage或正在动态创建控件,那么很可能控件ID正在重命名#SomethingElse变为#MainContent_SomethingElse。

检查此操作的最简单方法是使用适用于Firefox或Chrome的WebDeveloper插件。 转到信息 - >显示元素信息,然后选择有问题的对象。它会给你它的ID,班级,以及祖先和孩子的信息。 检查ID是否由.NET动态更改。

如果是这样的话:

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

SomethingElse.ClientIDMode = ClientIDMode.Static; 

然后,您可以在您引用的jQuery

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

我认为会发生的事情是,在ASP NET中,复选框和单选按钮在输入后生成“输入”和“范围”。所以你只需要选择输入。

你可以试试:

$('.classname input[type=checkbox]').each(function() { 
     this.checked = true; 
}); 

这里包括两个:寻找控制和执行的检查。在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中使用“包含”选择语法。因此,要找到这个元素,一旦呈现,你可以使用:

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

这句法会发现其ID中包含“$ sector1Radio”任何单选按钮

一旦你的元素,你可以选中或取消选中它使用以下代码,您可以通过其他元素的点击事件调用该代码。

// 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>