jsTree多次加载树,点击树节点的时候出问题了

依风听雨 发布于 2014/04/02 13:34
阅读 3K+
收藏 0

用的是jsTree0.9.8:
tree_component.css
jquery-1.6.4.min.js
css.js
tree_component.js
下面是创建树的js代码:

<script type="text/javascript">
 function createTree(){
 var conf = {
            data  : {
                type  : "json",
                json  : [
                    { attributes: { id : "pjson4_1" }, data: "Tree1 node 1", children : [
                        { attributes: { id : "pjson4_2" }, data: { title : "Custom icon" } },
                        { attributes: { id : "pjson4_3" }, data: "Child node 2" },
                        { attributes: { id : "pjson4_4" }, data: "Some other child node" }
                    ]},
                    { attributes: { id : "pjson4_5" }, data: "Tree1 node 2" }
                ]
            },
       ui : {
                theme_name : "checkbox"
            },
            callback : {
                onchange : function (NODE, TREE_OBJ) {
                    alert(1);
                    if(TREE_OBJ.settings.ui.theme_name == "checkbox") {
                        var $this = $(NODE).is("li") ? $(NODE) : $(NODE).parent();
                        if($this.children("a.unchecked").size() == 0) {
                            TREE_OBJ.container.find("a").addClass("unchecked");
                        }
                        $this.children("a").removeClass("clicked");
                        if($this.children("a").hasClass("checked")) {
                            $this.find("li").andSelf().children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
                            var state = 0;
                        }
                        else {
                            $this.find("li").andSelf().children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
                            var state = 1;
                        }
                        $this.parents("li").each(function () {
                            if(state == 1) {
                                if($(this).find("a.unchecked, a.undetermined").size() - 1 > 0) {
                                    $(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
                                    return false;
                                }
                                else $(this).children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
                            }
                            else {
                                if($(this).find("a.checked, a.undetermined").size() - 1 > 0) {
                                    $(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
                                    return false;
                                }
                                else $(this).children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
                            }
                        });
                    }
                }
            }
 };
 if($(this).data('tree')){
     var demoTree = $(this).data('tree');
     demoTree.destroy();
     demoTree.init($("#demo"), $.extend({},conf));
 }else{
    var demoTree = $.tree_create();
           $(this).data('tree',demoTree);
           demoTree.init($("#demo"), $.extend({},conf));
 }
};
</script>

问题:

第一次点击创建树的按钮,可以创建带checkbox的树,点击checkbox也是可以正常选择的
但是之后再点击创建树的按钮,checkbox就无法正常勾选
我再onchange里面加了alert(1)方法,第二次创建树时,checkbox每点击一次,onchange执行了二次,第三次创建树时,onchange就执行三次......

加载中
0
一枚阳光
我也遇到了这个问题,每点击一次就会增加执行一次!请问你找到方法了吗? 如果有好的解决方法就share出来哈!谢谢, 加我q:398996745
返回顶部
顶部