目前有一个功能,需要用js去添加菜单栏。菜单栏有三层
最后一层的数据是点击了第二层,后显示出来啊的,
刚开始我用for循环。将得到的值循环出来,用easyui的方法添加进去,但是绑定的onclick事件,默认的总是最后一个值。
最后发现分两步写就可以了。
如下:
for(d in data_list){
$("#"+node_id+"dim_mapping_field").menu('appendItem',{
id: node_id+data_list[d][0]+'dim_mapping_ids',
text : data_list[d][1],
attributes:data_list[d][0]
}
);
var s = $('#'+node_id+"dim_mapping_field").menu('getItem','#'+node_id+data_list[d][0]+"dim_mapping_ids")
var path = "dim_mapping_field_action('"+node_id+"','"+s.attributes+"','"+s.text+"')"
$("#"+s.id).attr("onclick",path);
}
将数据循环出来,在getItem后,attr一个onclick事件。
其实这种事情发生的原因是闭包的问题。
最简单的方法就是在定义d的时候,不用var定义,直接用let定义就可以了
for(let d in data_list){
$("#"+node_id+"dim_mapping_field").menu('appendItem',{
id: node_id+data_list[d][0]+'dim_mapping_ids',
text : data_list[d][1],
attributes:data_list[d][0],
onclick: function (item){
dim_mapping_field_action(node_id,data_list[d][0],data_list[d][1])
},
}
);
// var s = $('#'+node_id+"dim_mapping_field").menu('getItem','#'+node_id+data_list[d][0]+"dim_mapping_ids")
// var path = "dim_mapping_field_action('"+node_id+"','"+s.attributes+"','"+s.text+"')"
// $("#"+s.id).attr("onclick",path);
}
1088

被折叠的 条评论
为什么被折叠?



