0
votes

I have a Jquery Dialog box within my view, In this dialog box there is a UL LI list which is transformed to a treeview. I retain previous checkbox checked selection by adding the checked attribute in my HTML Text Writer helper. What I am trying to do is to remove the checked attribute once its un-checked. I am able to fire the event and get the value for instance true or false for check or uncheck but I am not able to scuccessfully remove the checked attribute if it was checked. The DOM still have the previous state of checked.

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

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

If I uncheck a checkbox, the following function still gives the old checkbox which is now unchecked:

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

2 Answers

0
votes

Try this:

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

You have a simple error in your code:

if (e.checked = false)

should read

if (e.checked == false)