当前位置:  开发笔记 > 前端 > 正文

为什么我的复选框总是被取消选中?

如何解决《为什么我的复选框总是被取消选中?》经验,为你挑选了1个好方法。

以下代码将一个复选框和一个标签添加到调用节点.
我的问题在于label.click函数.无论何时单击标签,我都想更改匹配复选框的状态.然而,会发生的事情是复选框始终未选中.出于调试目的,我现在总是明确地将其设置为选中.

当我用firebug逐步执行代码时,我看到复选框被检查,然后,当离开函数时,它再次被取消选中.

有任何想法吗?

jQuery.fn.AddEndOrStartWith = function(selected, id, action) {
    var checkBox = $('');
    checkBox.attr("id", id + action);
    checkBox.addClass(action + "CheckBox");
    checkBox.attr("for", id);

    var label = $('');
    label.attr("for", id + action);

    if (selected) {
        checkBox.attr("checked", "checked");
        label.addClass("lockerClosed");
    } else {
        label.addClass("lockerOpen");
    }

    $(this).append(label);
    $(this).append(checkBox);

    label.click(function() {
        /*alert(checkBox.attr("checked"));*/
        checkBox.attr("checked", "checked");
        /*return true;*/
        /*alert(checkBox.attr("checked"));*/
    });
}

chaos.. 5

您需要阻止标签单击处理程序中的默认操作.认为这应该这样做:

label.click(function() {
     checkBox.attr("checked", "checked");
     return false;
});

发生的事情是因为您的标签设置for正确引用了复选框,点击它时的默认操作是切换复选框.

虽然,嗯,如果你正在尝试用你的点击处理程序,我想你甚至可能都不会使用点击处理程序.但我不确定是否是这种情况.



1> chaos..:

您需要阻止标签单击处理程序中的默认操作.认为这应该这样做:

label.click(function() {
     checkBox.attr("checked", "checked");
     return false;
});

发生的事情是因为您的标签设置for正确引用了复选框,点击它时的默认操作是切换复选框.

虽然,嗯,如果你正在尝试用你的点击处理程序,我想你甚至可能都不会使用点击处理程序.但我不确定是否是这种情况.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有