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

Posted

技术标签:

【中文标题】类事件处理程序未检测是不是选中复选框【英文标题】:Class event handler not detecting whether or not checkbox is checked类事件处理程序未检测是否选中复选框 【发布时间】:2015-04-10 22:53:24 【问题描述】:

我要做的只是按类绑定某些复选框的更改事件-然后确定复选框是被选中还是未选中以进行进一步处理(与我当前的问题无关)。

无论如何都会弹出“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 语句总是评估为假。请帮忙!

更新:

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

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

【问题讨论】:

如果您可以在处理 ASP.NET 代码之后发布生成的 HTML,它将让我们更好地了解正在发生的事情。如果我手动将您发布的内容翻译成 HTML,jQuery 就可以正常工作。 所有设置 - asp.net 将复选框包装在一个跨度中,所以我只需要定位该类的子复选框元素。 【参考方案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");
    );
);

【讨论】:

呃——我也知道。谢谢!

以上是关于类事件处理程序未检测是不是选中复选框的主要内容,如果未能解决你的问题,请参考以下文章

如何处理extjs4中复选框上的选中和未选中事件?

检测在 Angular.js ng-change 事件中复选框是选中还是未选中

回发后未选中复选框

带有 IndirectSelection 的 dojox.enhancedGrid 中复选框的事件处理程序

Javascript 事件处理程序未拦截表单提交

如何判断事件是不是来自 C# 中的用户输入?