繁体   English   中英

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

[英]On Checkbox click event, Unable to remove checked="checked' attribute

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

HTML编写器

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;
                    });

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

if (e.checked = false)

应该读

if (e.checked == false)   

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM