目前有一个功能,需要用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); }