类事件处理程序未检测是否已选中复选框

时间:2015-02-10 18:56:45

标签: javascript jquery .net checkbox

我要做的就是按类别绑定某些复选框的更改事件 - 然后确定是否正在选中或取消选中该复选框以进行进一步处理(与我当前的问题无关)。

“nope”警告会弹出,无论如何 - 我不知道为什么。我已经阅读了几个相关的主题,我发布的代码似乎正在为其他人工作。

HTML:

        <asp:CheckBox ID="cbNewMembers" runat="server" Checked="true" Text="New Members" CssClass="GreenControl CheckOption" />
        <asp:CheckBox ID="cbLostMembers" runat="server" Checked="false" Text="Lost Members" CssClass="GreenControl CheckOption" />
        <asp:CheckBox ID="cbIncludeOnline" runat="server" Checked="false" Text="Include Online Apps" CssClass="GreenControl CheckOption" />

jQuery的:

$(document).ready(function (e) {
    $(".CheckOption").on("change", function () {
        if ($(this).is(":checked"))
            alert("yep");
        else
            alert("nope");
    });
});

请注意,我也尝试过:

if (this.checked)

if ($(this).prop("checked") == "checked")

以及其他一些组合。但是,就像我说的那样,if语句总是评估为false。请帮忙!

更新

我将事件处理程序更改为:

    $(".CheckOption input[type='checkbox']").on("change", function (e) {
        if ($(this).is(":checked"))
            alert("yep");
        else
            alert("nope");
    });

1 个答案:

答案 0 :(得分:1)

ASP.NET复选框不会呈现为HTML中的简单复选框。

<asp:CheckBox ID="oi" CssClass="test"  runat="server"/>

打印为:

<span class="test"><input id="MainContent_oi" type="checkbox" name="ctl00$MainContent$oi"></span>

因此,您最终将事件处理程序附加到span而不是input,您的处理程序仍然会被触发,因为更改事件会传播到input父项。

要在事件处理程序中获取输入,请添加事件参数并将this更改为evt.target

$(document).ready(function (e) {
    $(".CheckOption").on("change", function (evt) {
        if ($(evt.target).is(":checked"))
            alert("yep");
        else
            alert("nope");
    });
});