在复选框上单击事件,无法删除checked =“checked”属性

时间:2014-08-10 21:31:40

标签: javascript jquery html

我的视图中有一个Jquery对话框,在这个对话框中有一个UL LI列表,它被转换为树视图。我通过在HTML Text Writer帮助器中添加checked属性来保留先前复选框选中的选项。我想要做的是取消选中后检查属性。我可以触发事件并获取值为true或false以进行检查或取消选中,但是如果选中该属性,则无法成功删除已检查的属性。 DOM仍然具有先前检查的状态。

HTML Writer

InUl(() => locations.ForEach(location => InLi(() =>
            {

                var children = this.childrenRenderer(location);

                bool childStatus = !(children != null && children.Count() > 0);
                if (childStatus)
                {

                    writer.AddAttribute("type", "checkbox");
                    writer.AddAttribute("value", urlRenderer(location));
                    writer.AddAttribute("id", htmlPrefix + urlRenderer(location));
                    writer.AddAttribute("onclick", "handleClick(this)");
                    if (keys != null)
                    {
                        if (keys.Contains(Convert.ToInt32(urlRenderer(location))))
                        {
                            writer.AddAttribute("checked", "checked");
                        }
                    }
                    writer.RenderBeginTag("input");
                }
                writer.Write(locationRenderer(location));
                if (childStatus)
                {
                    writer.RenderEndTag();
                }
                RenderLocations(children);
            })));

JS功能

   function handleClick(e) {
        alert("Click, new value = " + e.checked);
        var $this = $(this);
        if (e.checked = false) {
            $this.removeAttr('checked');
        }
    }

如果我取消选中一个复选框,则以下函数仍会提供现在未选中的旧复选框:

$("#errorCodes input:checkbox:checked").each(function () {
                        var v = $(this).val();
                        a.push(v);
                        if (errorTextArea.length > 0) {
                            errorTextArea = errorTextArea + " | ";
                        }
                        errorTextArea = errorTextArea + v;
                    });

2 个答案:

答案 0 :(得分:0)

您的代码中有一个简单的错误:

if (e.checked = false)

应该阅读

if (e.checked == false)   

答案 1 :(得分:0)

试试这个:

function handleClick(e) {
        alert("Click, new value = " + e.target.checked);
        if (e.target.checked == false) {
            e.target.removeAttr('checked');
    }
}