如何捕获复选框点击事件?

时间:2011-08-26 18:58:39

标签: jquery jstree

我正在使用jstree并尝试捕获复选框状态更改事件。如何获取当前所选复选框的状态及其列表ID?

我在这里找到的例子: Jquery Jstree checkbox events capture 但我无法弄清楚如何获得节点的检查状态。如果有更好或更简单的方式,我愿意接受其他建议。

$("#demo1").bind("change_state.jstree", function (e, d) {
        if ((d.args[0].tagName == "A" || d.args[0].tagName == "INS") &&
            (d.inst.data.core.refreshing != true && d.inst.data.core.refreshing != "undefined")) 
        {
            //if a checkbox or it's text was clicked, 
            //and this is not due to a refresh or initial load, run this code . . .
            alert("list id: " +d.rslt.attr("id"));
            alert("is item checked?" +"***TODO***"); 
        }
    });

感谢。

**编辑:我让我的问题更清楚,以避免混淆组合插件(这不是我正在做的事情)。我在jstree中启用了树复选框。 **

1 个答案:

答案 0 :(得分:0)

不是解决方案,解决方法!!! 我发现这篇文章在寻找类似问题的解决方案之后,在玩各种场景后决定不使用

  

real_checkboxes

选项。相反,我添加了一系列隐藏的复选框,并修改了您的脚本以设置隐藏框的已检查状态,然后将其发布回表单中的服务器(MVC3)。然后,我可以使用树节点LI的id来设置我的复选框的已检查状态。

if ((d.args[0].tagName == "A" || d.args[0].tagName == "INS") &&
        (d.inst.data.core.refreshing != true && d.inst.data.core.refreshing != "undefined")) {
            //if a checkbox or it's text was clicked, 
            //and this is not due to a refresh or initial load, run this code . . .
            var id = d.rslt.attr("id"); 
            var checked = $("#" + id + ".jstree-checked").length!=0; // use the length!=0 to get a bool of the checked status
            $("#log").append("list id: " + id);
            $("#log").append("is item checked ? " + checked);
            $("#log").append("<br/>");


        }