easyui异步加载tree的问题

想要实现从本地中加载json文件,通过事件来动态的插入到ul中时,遇到了一小bug

html中代码是这样的

<ul class="easyui-tree" id="tt"></ul>

js中的代码

$(".next-menu:nth-child(1) a").click(function() {
        var $IDstr     = $(this).attr("id"),
            $treeIDNum = parseInt($(this).attr("treeID")),
            jsonURL    = "json/" + $IDstr + ".json",
            node;

        addAttr2Tree(jsonURL);
        changeImgSrc($treeIDNum);       
        });
    });
function changeImgSrc(nodeID){
    var node = $("#tt").tree('find', nodeID);
    if(node){
        $("#tt").tree('select', node.target);
    }
    if (node.attributes) {
        $("#img-box").attr("src", node.attributes.url);
    }
}
function addAttr2Tree(URL){
    $("#tt").tree({
        url: URL,
        method: "get",
        animate: true,
        lines: true
    });
}

起初是想通过一个按钮的点击事件来动态的加载tree的内容
就是如上代码,addAttr2Tree 是用来将点击按钮时对应的本地json数据加到html中的ul标签中,
changeImgSrc 是对tree节点的一些选中操作以及图片的加载,但是无论怎么调试,总是会出现一条错误

无法获取attributes属性!!!我反复确认attributes是完整无缺的放在json文件里的
而且总是第一次点击按钮时才会出现这种错误,第二次及其以后,这种错误是没有的

后来我就想到,是不是因为json数据动态加载的速度比不上程序代码执行的速度?!

果然不出我所料!easyui中tree自带了一个方法onLoadSuccess 当数据成功加载时,才会执行一些操作
所以

$(".next-menu:nth-child(1) a").click(function() {
        var $IDstr     = $(this).attr("id"),
            $treeIDNum = parseInt($(this).attr("treeID")),
            jsonURL    = "json/" + $IDstr + ".json",
            node;

        addAttr2Tree(jsonURL);
        $("#tt").tree({
            onLoadSuccess: function(){
                changeImgSrc($treeIDNum);
            }
        });
    });

代码改成这样就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值