当单选按钮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”的单选按钮?
干杯!
我觉得你的问题是,输入的ID不再sector1Radio而是ctl00_sector1Radio或类似的东西。如果您的输入控件位于例如一个ContentPlaceHolder控件(使用母版页时)。
你能检查生成的HTML代码(在浏览器中)来验证是否是这种情况?输入控件的标识是什么?
如果是这样的话,你需要生成你的js jQuery代码
$('#SomethingElse').click(function() {
$('input[title=Sector1]').attr('checked','checked');
});
从代码隐藏
使SomeThingElse被替换为控制客户端ID。
$('#')。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中注意这一点!
我的答案严重失真:( – 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>
添加中用runat =“服务器”应该不会影响你的代码。你也该属性添加到“SomethingElse”元素,因为它可能会改变所呈现的ID? – Paddy 2010-08-10 14:40:47
啊,我没认为它会影响它,我没有将它添加到'SomethingElse',这是一个锚标签,如果有帮助吗? – 2010-08-10 14:45:57
@ wyane我刚测试过的属性runat =“s erver“,它似乎工作正常...看起来像一个冲突,你在同一页面中使用任何其他的JavaScript框架? – manraj82 2010-08-10 15:27:11