2013-03-18 110 views
2

我创建了2个单选按钮单选按钮名称更改

<input type="radio" name="ApprovalGroup" runat="server" id="ApprovedOnly" value="true" />Approved 
<input type="radio" name="ApprovalGroup" runat="server" id="UnapprovedOnly" value="false" />Unapproved 

,并能够从JS与$("input[name=ApprovalGroup]:checked").val()访问他们,但后来我需要添加runat="server",所以我可以在代码中访问的单选按钮后面。

我遇到的问题是单选按钮名称因为内容占位符而正在更改。我正在使用ClientIDMode="Static",但它只保护id值,而不是名称。单选按钮呈现为

<input value="true" name="ctl00$cphContent$ApprovalGroup" type="radio" id="ApprovedOnly" />Approved 
<input value="false" name="ctl00$cphContent$ApprovalGroup" type="radio" id="UnapprovedOnly" />Unapproved 

是否可以防止名称更改?

+0

我认为所有3个答案都很好,不知道哪个标记为答案,所以我标记了我最终使用的答案。 – JayGee 2013-03-18 15:22:02

回答

4

你可以使用$=选择,其中选择其值与给定的子字符串结束属性:

$("input[name$=ApprovalGroup]:checked") 
+0

那么为什么不直接使用“ends with”选择器,因为原始名称将始终位于生成名称的末尾(按照ASP.NET的约定)?更安全,其中'* ='可以匹配“ApprovalGroupSecond”。并且可能会节省一些我们没有看到但仍然存在的处理。 – Ian 2013-03-18 15:12:33

+0

@Ian肯定会工作,我猜。 '$ = ApprovalGroup' – 2013-03-18 15:14:50

+0

'$ ='将成为这里的路。例如,如果您还有一个名为“ApprovalGroupValidator”的控件,那么'* ='会导致问题。 ASP只是前置。 – 2013-03-18 15:19:26

3

.NET希望为自己的目的的名字,但这并不阻止你使用一个CSS你自己的类名。

这样你可以使用$('.classname').val()。您可以为字段使用单独的类名称,或者共享它们以创建组。

1
$("input[name*=ApprovalGroup]:checked") 

是一个很好的解决方案,但如果有另一个输入包含这些词,那么它可能会发生冲突。所以更安全的解决方案是使用您自己的属性。 等;

<input type="radio" name="ApprovalGroup" data-group="group1" runat="server" id="ApprovedOnly" value="true" />Approved 
<input type="radio" name="ApprovalGroup" data-group="group1" runat="server" id="UnapprovedOnly" value="false" />Unapproved 

然后使用下面的过滤器;

$("input[data-group='group1']:checked") 
+0

如果你打算建议使用自定义属性,至少建议一个有效的属性 - http://html5doctor.com/html5- custom-data-attributes/ – Ian 2013-03-18 15:11:33

+0

感谢关注:) – 2013-03-18 15:14:34