簡體   English   中英

asp:CheckBox的this.id為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM