最近工作需要,需要实现一个这样的功能:点击选择按钮,弹出一个新的窗口里面是个网点的树形下拉菜单,点击树形菜单,父窗口里面的某个文本框显示选中网点的网点名称,相应的隐藏域里被初始化一个为网点的ID值, 同时父窗口中的一个select选择框添加这个网点下所有的部门的option,并且关闭打开的新窗口: 出现的第一个问题是在添加select的option上,因为要调用ajax访问后台,后台传送一个json数组到前台,但是ajax请求总是不能成功的完成,后来发现因为javascript调用一个function的时候,function后面的代码是同时被执行的,在调用添加option函数后,调用了window.close();,所以ajax没能完成,以下是添加option的函数
function addDepartment(dept_id){ var url = "<%=_base%>/dept/finddepart.do?dept_id="+dept_id; sendAjaxReq("get",url,null,function(req){ alert(req.responseText); eval("var departs="+req.responseText); var oDom=opener.document; var e2 = oDom.getElementById("s1"); e2.options.length=1; for(var i=0;i<departs.length;i++){ var opt = oDom.createElement("option"); opt.text = departs[i].name; opt.value = departs[i].no; if(window.navigator.userAgent.toLowerCase().indexOf("ie")>0){ e2.options.add(opt); }else{ e2.appendChild(opt); } } window.close(); }); }
解决这个问题后,发现窗口关闭不了。 出现了个js运行时异常,提示信息时‘服务器发生异常’ 令我抓狂了一段时间,后来发现时在
var opt = oDom.createElement("option");中的oDom,我直接用了document,而不是父窗口的document对像,从而往父窗口添加option不能正常添加。 后来还有点问题是由于传送过来的json数组造成的 传过来的json数组为[{"name":"上地网点","id","1"},] 提示opt.text = departs[i].name; 为空或不是对象,后来在后台处理的时候把最后那个“,”去掉,后来就一切正常了