2013-03-18 109 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