[英]this.id is empty for asp:CheckBox
我有一個帶有以下標簽的asp:CheckBox
:
<asp:CheckBox ID="cbTest1" runat="server" onchange="cbChange(this.id);"/>
cbChange
是<head>
中的Javascript函數,看起來像這樣(現在很簡單):
<script type="text/javascript">
function cbChange(senderID) {
alert('|' + senderID + '|'); // '|' is to help see string length
return false;
}
</script>
現在,每當我單擊cbTest1
,都會出現帶有以下文本的警報框:
||
換句話說,它是一個空/空字符串。 我還應該注意,當我使用更傳統的<input>
,可以獲得預期的結果:
( <input>
代碼)
<input type="checkbox" name="cbtest2" id="cbtest2" onchange="cbChange(this.id);" />
(當我檢查cbtest2
時,警告框中的文本)
| cbtest2 |
為什么我要使用asp:Checkbox
獲取null / empty字符串,但為什么要使用<input>
預期的行為?
編輯我做了更多的研究,因為asp:CheckBox
具有ID
屬性而不是(小寫) id
,所以我嘗試了onchange="cbChange(this.ID);"
。 現在,我在警報框中得到以下輸出:
|未定義|
為什么還會發生這種情況?
拉起渲染的頁面源,您將看到ASP實際將其渲染為:
<span onchange="cbChange(this.id);"><input id="ContentArea_cbTest" type="checkbox" name="ctl00$ContentArea$cbTest" /></span>
您的input
元素實際上嵌套了一個span
元素。
使用Pure JS,您仍然可以通過執行以下操作獲取input
的ID:
<asp:CheckBox ID="cbTest" runat="server" onchange="cbChange(this.childNodes[0].id);"/>
如果您查看源代碼,則會看到:
<span onchange="cbChange(this.id);">
<input id="cbTest" type="checkbox" name="cbTest" />
</span>
WebForms的缺點之一-標記並非總是如您所願。
最好的選擇是在客戶端上手動掛接事件。 如果碰巧正在使用jQuery,則可以執行以下操作:
jQuery(document).ready(function() {
jQuery("#<%= cbTest.ClientID %>").click(function() {
cbChange(jQuery(this).attr("id"));
});
});
(如果您不使用jQuery,請執行相同的操作,只需使用常規javascript手動連接到click事件-盡管我始終必須查找該語法...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.