急!!有checkbox的树遍历后浏览器很卡的问题,小女子求js大神帮帮忙

baidu_23182613 2014-12-30 02:13:39


如图,点击父页面的所属栏目,弹出子页面的ztree,第一次在复选框中勾选相应栏目后,第二次在父页面的栏目select框中再次点击时要把上次选的栏目默认勾选中,每次选中点确定后覆盖上一次的内容。
功能已经实现,但是不知道哪里写得不够好,导致打开浏览器测试非常卡(ie),每次选多个栏目后下一次再点开就会卡死

子页面js代码:
$(function(){
var setting = {
check: {
enable: true,
isParent:true,
chkboxType : {"Y":"s","N":"s"}
},
view: {
dblClickExpand: false
},
data: {
simpleData: {
enable: true
}
},
callback: {
beforeClick: beforeClick,
onClick: onClick
}
};


$.fn.zTree.init($("#organName_treeDemo"), setting, ${nodeListJSON});

//确定时的点击事件,把子页面选中的id,name传到父页面
$("#btn").click(function() {
var goodsTypes = new Array();
var treeObj = $.fn.zTree.getZTreeObj("organName_treeDemo");
var checkedNodes = treeObj.getCheckedNodes();
for (var i = 0; i < checkedNodes.length; i++) {
var goodsType = new Object();
goodsType.code = checkedNodes[i].id;
//goodsType.name = checkedNodes[i].name;
var path = getFilePath(checkedNodes[i]);
goodsType.name = path;
goodsTypes[i] = goodsType;
}

window.parent.callback(goodsTypes);

// 关闭当前iframe
closeDialogInIframe();
});

//初始化时添加上次勾选的选项到树中
var treeObj = $.fn.zTree.getZTreeObj("organName_treeDemo");
window.parent.$('#cmsInfoNodeStr option').each(function(){
treeObj.checkNode(treeObj.getNodeByParam("id",$(this).val()),true,true);
});
});

function beforeClick(treeId, treeNode) {
return true;
}

function onClick(e, treeId, treeNode) {
var treeObj = treeId.split("_")[0];
var zTree = $.fn.zTree.getZTreeObj(treeId),
nodes = zTree.getSelectedNodes(),
v = "";
t = "";
nodes.sort(function compare(a,b){return a.id-b.id;});
for (var i=0, l=nodes.length; i<l; i++) {
v += "," + nodes[i].id;
t += "," + nodes[i].name;
}
if (v.length > 0 ) v = v.substring(1);
if (t.length > 0 ) t = t.substring(1);
var cityObj = $("#"+treeObj);
cityObj.attr("value", t);
$("#"+treeObj+"_Id").val(v);

onCmsNodeClick(v);
}

function getChildx(node){
return node.children;
}



父页面js:
//子页面到父页面的回调函数
function callback(goodsTypes){
$('#condition_infoItem').empty();
var vHtml = $("#condition_infoItem").html();
var infoItemStr = "" + $("#condition_infoItemStr").val();

// 所有选中的栏目对象
if (goodsTypes != null) {
for (i = 0; i < goodsTypes.length; i++) {
var code = goodsTypes[i].code;
var name = goodsTypes[i].name;
var option = "<option value='" + code + "'>" + name + "</option>";
vHtml += option;
}
}

$("#condition_infoItem").html(vHtml);
$("#condition_infoItemStr").val(infoItemStr);
}

function showInfoItem(){
var url="incNodeTree.do";
openDialogInIframe(url, '选择栏目', $(this).height()-100, 300, 1, "<%=ApplicationContextUtil.getThemePath(request)%>/images/loading.gif");

}

...全文
236 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyc305213781 2014-12-31
  • 打赏
  • 举报
回复
你换Firefox和chrome试试,应该就不卡了,IE上就算是table的行变色,数据大于50条都会卡的
functionsub 2014-12-30
  • 打赏
  • 举报
回复
var treeObj = $.fn.zTree.getZTreeObj("organName_treeDemo");
        window.parent.$('#cmsInfoNodeStr option').each(function(){
//            treeObj.checkNode(treeObj.getNodeByParam("id",$(this).val()),true,true);//先把这句注释掉试试
        });
});
虽然没用过,但实际 听人说过很多次,理论上这么成熟的插件不会这样卡的吧。
baidu_23182613 2014-12-30
  • 打赏
  • 举报
回复
有,showInfoItem()方法,用iframe弹窗
functionsub 2014-12-30
  • 打赏
  • 举报
回复
看了半天,发现你没有把关键的点击父页面select的时候的代码贴出来。。

87,984

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧