日期:2014-05-16  浏览次数:20328 次

jquery插件中,json返回的data如何被一个click事件的处理函数调用
本帖最后由 showbo 于 2014-04-02 08:52:55 编辑
准备做一个tree插件,刚刚开始,从后台返回整个tree,在json对象data中,已经把根节点都显示出来了,点击这些结点的时候,有个click事件,从data中获取这个结点的子节点并显示出来,但是在这些结点的click事件中,不知道怎么调用data。我可以再次到后台数据库中查询该结点的子节点,但是不想频繁和服务器交互,想一次查完放在data中,以后的操作都从这个data中找。以下是代码。

(function($) {
$.fn.jTree = function(options) {
var defaults = {
background : 'gray',
width : '200',
border : 'solid red 1px',
actionName : 'queryAllMenus.action'
};
// Extend our default options with those provided.
var opts = $.extend(defaults, options);
$(this).css("width", opts.width);
$(this).css("border", opts.border);

$(this).empty();
var data = queryAllMenus(opts);
createRoots(data, $(this));
// 查询所有的menu,把所有parent_id为零的结点显示出来,作为根节点
function queryAllMenus(opts) {
var retValue = null;
$.ajax({
url : opts.actionName,
context : this,
async : false,
success : function(data, status) {
retValue = data;
}
});
return retValue;
}
function createRoots(data, obj) {
for ( var i = 0; i < data.menuList.length; i++) {
if (data.menuList[i].PARENT_ID == 0) {
var node_name = data.menuList[i].NODE_NAME;
var leaf = data.menuList[i].LEAF;
var ul = $("<ul>").appendTo(obj);
if (leaf == 0) {
$("<li class='node'><input type='hidden' value='0' id='clicked'/>" + node_name + "</li>").appendTo(ul);
} else {
$("<li class='leaf'>" + node_name + "</li>").appendTo(ul);
}

}
}
}
// 点击非叶子节点的时候,判断是否点击过,如果没有点击过,查询它的子节点并显示,如果点击过,直接显示
$("li.node").click(function(event) {
if (this == event.target) {
if($(this).children("#clicked").val() == 0){

}
// $(this).children().toggle();
}
});
};
})(jQuery);



就是?红色的函数,想调用上面的var data = queryAllMenus(opts);的data的值,有什么办法吗??
------解决方案--------------------
直接用就好了,data的作用域在你的那个click事件中也可以引用到

        $("li.node").click(function(event) {alert(data)////////
            if (this == event.target) {
                if($(this).children("#clicked").val() == 0){
                     
                }
                // $(this).children().toggle();
            }
        });