1

我有一个asp:CheckBox带有以下标签的:

<asp:CheckBox ID="cbTest1" runat="server" onchange="cbChange(this.id);"/>

cbChange是一个 Javascript 函数<head>,看起来像这样(现在很简单):

<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,但使用<input>?

编辑我做了更多的研究,因为asp:CheckBoxID属性而不是 (lowercase) id,所以我尝试了onchange="cbChange(this.ID);". 现在我在警告框中得到以下输出:

|未定义|

为什么还会发生这种情况?

4

2 回答 2

1

拉起您呈现的页面源代码,您会看到 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);"/>
于 2013-07-10T15:50:28.163 回答
1

如果您查看源代码,您将看到:

<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 事件 - 我总是必须查找该语法...)

于 2013-07-10T15:52:02.320 回答