1.Jquery在使用$(dom)注意的问题
最近在忙两个菜单,今天终于忙下来了,同时也发现了一两个小的问题。
在使用webui的时候获取复选框选中的值,我的想法很简单就是获取复选框所在div的节点然后循环遍历复选框dom,最后根据hasClass判断是否复选框是否勾选则只需要判断是否有ckecked就行。但是在遍历判断的时候就发现了一个问题,我第一次写的时候,是这么写的。
var fixInfo = $("#fixinfo");
var allSpan = fixInfo.find(".ui-select-item");
for(var i=0;i<allSpan.length;i++){
var dom = allSpan[i];
if(dom.hasClass('checked')){
var childNode = dom.childNodes[1];
var info={
"extAttrCode":childNode.attr('value'),
"extAttrValue":"1"
};
seleted.push(info);
}else{
var childNode = dom.childNodes[1];
var info={
"extAttrCode":childNode.attr('value'),
"extAttrValue":"0"
};
seleted.push(info);
}
}
在使用的时候一直在报错dom.hasClass(‘checked’)没有这个方法,我一直思前想后这个不是jquery的用法吗,然后我想起来了以前貌似也碰到这个问题,然后组里前端牛人告诉我在这样使用的时候需要加上jquery的头就是$(dom).hasClass(‘checked’),然后我就想查了下,然后自己归纳下,不一定是正确的,就是通过jquery获得的dom节点相当于是返回了一个对象你,但是你不能直接对这个对象直接进行jquery操作需要通过对这个对象进行jquery的选取才能够使用jquery的方法,如同下面这种。
var fixInfo = $("#fixinfo");
var allSpan = fixInfo.find(".ui-select-item");
for(var i=0;i<allSpan.length;i++){
var dom = allSpan[i];
if($(dom).hasClass('checked')){
var childNode = dom.childNodes[1];
var info={
"extAttrCode":$(childNode).attr('value'),
"extAttrValue":"1"
};
seleted.push(info);
}else{
var childNode = dom.childNodes[1];
var info={
"extAttrCode":$(childNode).attr('value'),
"extAttrValue":"0"
};
seleted.push(info);
}
}
2.就是跨域的问题,因为在菜单开发的时候发现需要重新的调用另外一个菜单,但是值的传入传出都是一个问题,还好已经有前人解决了这个方法,我就拿过来用下。
传入调用的方法
var windObj = {
scroll:"yes",
url: path,
height:'500px',
param: {
"billId":$("#billId").val(),
"opRegionId":sessionCache.opRegionId,
"cooperatorType":json.cache.baseAddrInfo.cooperatorType,
"cooperatorName":json.cache.baseAddrInfo.cooperatorName,
"connect_type":json.cache.baseAddrInfo.connect_list[0].connect_type,
"connect_name":json.cache.baseAddrInfo.connect_list[0].connect_name,
"countyId":json.cache.baseAddrInfo.area_id
},
callback:function(retVal){
if(typeof(retVal)!="undefined"){
var data = jQuery.parseJSON(retVal);
cache.broadOpenData = data;
$('.dialog-broadband-id .ui-input').val(cache.broadOpenData.broadInfo.broadAcct);
obj.isOldAcct=false;
broadFlag="1";
}
}
};
util.showModalDialog(windObj);
在windObj 中拼入url表示开启的页面 para表示传到新开的页面的如入参,通过callback的回调函数能够获取到新开页面返回的参数
showModalDialog: function(obj) {
var scroll = obj.scroll || "yes",
resizable = obj.resizable || "no",
help = obj.help || "no",
status = obj.status || "no",
edge = obj.edge || "sunken",
dialogHeight = obj.height || "500px",
dialogWidth = obj.width || "810px",
broswerWidth = window.screen.availWidth,
broswerHeight = window.screen.availHeight,
dialogHeightNum = parseInt(dialogHeight.replace("px", ""));
dialogWidthNum = parseInt(dialogWidth.replace("px", ""));
dialogLeft = (broswerWidth - dialogWidthNum) / 2 ,
dialogTop = (broswerHeight - dialogHeightNum) / 2 ;
var retVal = window.showModalDialog(obj.url,obj.param,"dialogTop:"+dialogTop+";dialogLeft:"+dialogLeft+";scroll:"+scroll+";resizable:"+resizable+";help:"+help+";status:"+status+";edge:"+edge+";dialogHeight:"+dialogHeight+";dialogWidth:"+dialogWidth);
if(obj.callback) {
obj.callback(retVal);
}
}
通过util中的代码可以看出还是通过浏览器自带的事件将值返回,因为开发的菜单的使用人群都是用ie的所以这个方法在chrome中并不能实现,因为chrome不支持window.showModalDialog
同时在新建的页面也要也对应的返回参数
var str = JSON.stringify(params);
window.returnValue=str;
window.close();