原生JS生成动态select下拉框步骤
来源:互联网 发布:淘宝店铺装修网站 编辑:程序博客网 时间:2024/06/09 14:30
1.加载页面时,应初始化下拉框数据
<body onLoad="init()" style="width:100%; height:100%; overflow:auto" >
2.数据来源于数据库,需调用后台去查询,利用ajax异步调用,这里利用公司封装好的方法调用
function init() {var pubRes = new Array(); pubRes = callRemoteFunctionNoTrans("serviceRegionService","queryServiceRegionType");//封装好的方法可在后面带参数var srtEle = document.getElementById("txtSrvRegionType"); //遍历得到的数组对象,填充下拉框,js中无list类型 for(var i = 0 ;i < pubRes.length;i ++ ) { var option = document.createElement("option"); var text = document.createTextNode(pubRes[i].descChina); option.appendChild(text); option.value = pubRes[i].serialNo; srtEle.appendChild(option); }}
3.封装的callRemoteFunctionNoTrans(...)方法,传入的参数是spring中配置的, 必须配置, 否则不行
function callRemoteFunctionNoTrans(serviceName,funcName){ var URL="/ResService/busifacadeservlet"; var doc = makeDOM(); var node = doc.createProcessingInstruction("xml","version='1.0'"); doc.appendChild(node); node = doc.appendChild(doc.createElement("Function")); node.setAttribute("name",funcName); node.setAttribute("serviceName",serviceName); for(var i=2;i<arguments.length;i++){ var elm = doc.createElement("Param"); var type = getObjectType(arguments[i]); elm.setAttribute("type", type); packageObject(elm, type, arguments[i]); node.appendChild(elm); } //window.prompt("xml", doc.xml); //发送到后台 var retVal; var xmlHttp = new ActiveXObject("Microsoft.XmlHttp"); xmlHttp.open("POST", URL, false); xmlHttp.send(doc.xml); if(xmlHttp.status!=200){ throw new Error(0,"Network issue or remote server issue"); return; }else retVal = xmlHttp.responseText; //window.prompt("xml", retVal); //xml转为object doc = makeDOM(); try{ if(!doc.loadXML(retVal)){ throw new Error(0,"发生系统异常,请联系系统管理员!"); return; } node = doc.documentElement; switch(node.tagName){ case "Output":return getObjectFromXml(node,node.getAttribute("type")); case "Error":throw packageError(node); default:throw new Error(0,"发生系统异常,请联系系统管理员!"); } } finally{ retVal = xmlHttp = node = doc = null; }}<!--private -->function IsInt(num){ return ((num%1)==0)}function getObjectType(obj){ //n=null,b,i,f,s,d,o,a if(obj == null) return 'n'; if(obj.constructor.toString().indexOf("Date")>0) return 'd'; if(obj.constructor.toString().indexOf("Array")>0) return 'a'; switch(obj.constructor){ case Number: if(IsNumberInt(obj))return 'i'; elsereturn 'f'; break; case Boolean: return 'b'; break; case String: return 's'; break; case Date: return 'd'; break; case Array: return 'a'; break; default: return 'o'; break; }}function packageObject(elm,type,arg){ switch(type){ case 'n': break; case 'b': case 'i': case 'l': case 'f': case 's': elm.text = strEncoded(arg.toString()); break; case 'd': elm.text = dateToString(arg); break; case 'o': for(var key in arg){var child =arg[key];var subtype = getObjectType(child);//it's empty deal to its minValue in b/i/f //wangcc modify 201002021537 BEGINif(typeof child!="function"){//function就不要分装了var childElm = elm.ownerDocument.createElement(subtype+key);elm.appendChild(childElm);packageObject(childElm,subtype,child); } //wangcc modify 201002021537 END } break; case 'a': for(var i=0;i<arg.length;i++){var child =arg[i];var subtype = getObjectType(child);var childElm = elm.ownerDocument.createElement(subtype+"Item");elm.appendChild(childElm);packageObject(childElm,subtype,child); } break; }}function getObjectFromXml(elm,type){ if(type==null) return null; switch(type){ case 'n': case 'v': return null; case 'b': case 'B': return (elm.text=="true"); case 'i': case 'I': case 'l': case 'L': var val = parseInt(elm.text); if(isNaN(val)) throw elm.tagName+" must be an integer"; return val; case 'f': case 'F': var val = parseFloat(elm.text); if(isNaN(val)) throw elm.tagName+" must be an float"; return val; case 's': case 'S': return elm.text; case 'd': case 'D': try{return parseDate(elm.text); }catch(ex){throw elm.tagName+"must be in a DateTime format(yyyy-MM-dd HH:mm:ss)"; } case 'o': { var obj = new Object(); var nodes = elm.childNodes; for(var i=0;i<nodes.length;i++){var child = nodes[i];if(child.nodeType==1){//NODE_ELEMENT var childtype = child.tagName.charAt(0); var key = child.tagName.substring(1); obj[key] = getObjectFromXml(child,childtype);} } return obj; } case 'a': { var arr = new Array(); var nodes = elm.childNodes; for(var i=0;i<nodes.length;i++){var child = nodes[i];if(child.nodeType==1){//NODE_ELEMENT var childtype = child.tagName.charAt(0); var key = child.tagName.substring(1); if(key=="Item"){ arr[arr.length] = getObjectFromXml(child,childtype); }} } return arr; } default: throw "type '"+ type +"' can't be recognized"; }}function parseDate(str){ var arrDate = str.split(/[\/\-: ]/); if(arrDate.length<6) throw "Invalid DateTime format"; var d = new Date(arrDate[0],parseInt(arrDate[1]-1),arrDate[2],arrDate[3],arrDate[4],arrDate[5]); if(isNaN(d)) throw "Invalid DateTime format"; return d;}function parseDateStr(str){ var yearStr = str.substring(0,4); var monthStr = str.substring(5,7); var dayStr = str.substring(8,10); var dDay = new Date(yearStr,monthStr-1,dayStr); return dDay;}function dateToString(d){ return d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();}/* 特殊字符编码 */function strEncoded(str){ if(str!=null){ //str = str.replace("\"", dq); //str = str.replace(/'/g, "’"); //str = str.replace(/"/g, "”"); //str = str.replace("\\", tq); //str = str.replace("=", eq); //str = str.replace(/</g, "<"); //str = str.replace(/>/g, ">"); //str = str.replace(/&/g, "&"); }else{ str=""; } return str;}
function StrEnCode(s){ return (s)? s.replace(/'/g, "’").replace(/"/g, "”").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&") : "";}
public class BusiFacadeServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1581438754814059524L; private static Logger _logger = Logger.getLogger(BusiFacadeServlet.class); // 字符集设置 private static final String LOCAL_CHARSET = "GBK"; /** Initialize global variables */ public void init() throws ServletException { super.init(); } /** * 统一服务方法 * * @param request * HttpServletRequest * @param response * HttpServletResponse * @throws ServletException * @throws IOException */ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(LOCAL_CHARSET); response.setContentType("text/html; charset=" + LOCAL_CHARSET); Long tid = Thread.currentThread().getId(); String returnValue = null; try { _logger.info("[" + tid + "]service begin.....");//打印日志信息便于查bug WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext()); returnValue = ExecutionFactory.execute(request, response, ctx); } catch (UOSException e) { _logger.error(e.getError(), e); returnValue = e.getMessage(); } finally { _logger.debug("[" + tid + "]sreturnValue=" + returnValue); _logger.info("[" + tid + "]service end....."); } PrintWriter out = response.getWriter(); out.print(returnValue); out.close(); } /** Clean up resources */ public void destroy() { super.destroy(); }}
5.封装的makeDOM()方法
function makeDOM(){var o,suffixs=[".4.0",".3.0",".2.0",""];for(var i=0;i<suffixs.length;i++){try{o=new ActiveXObject("msxml2.DOMDocument"+suffixs[i]);break;}catch(ex){};}try{o.async=false;o.validateOnParse=false;o.resolveExternals=false;}catch(e){alert(e.description);}return o;}
有地方不能通过或者有缺少什么封装的方法的可以留言,这里提供了一个很好的封装就是前端js可以直接调用Spring配置的service
0 0
- 原生JS生成动态select下拉框步骤
- 使用原生js动态生成Select,根据前面的Select的option生成二级Select
- JS动态添加select下拉框
- JS动态操作select下拉框
- JS操作select下拉框动态变动
- JS动态添加select下拉框
- select 控件编辑 动态生成 下拉列表框
- js对下拉框(select)的动态操作
- JS操作select下拉框动态变动(创建/删除/获取)
- jquery及原生js获取select下拉框选中的值示例
- 原生js实现对select下拉列表的内容过滤
- 用js+jsp实现在同一个下拉列表中,动态生成多级select选项
- 记录:ajax获取数据动态生成select下拉选js部份
- JS 控制select下拉框
- js动态生成级联下拉列表
- js--dom--动态生成【下拉列表】
- js动态生成级联下拉列表
- js动态生成级联下拉列表
- ACM Sdut 2158 Hello World!(数学题,排序) (山东省ACM第一届省赛C题)
- VS2010 CString 转 const char *
- ubuntu12.04.4中在mysql控制台下通过命令设置编码
- The ideal length for everything on the Internet
- struts2实现CRUD(增 删 改 查)
- 原生JS生成动态select下拉框步骤
- Java 将字节数组转化为16进制的多种方案
- 关于查询FileNet PE中用户Inbox信息
- Visual C++ 光标
- python BeautifulSoup模块的安装
- 【HackerRank】Red John is Back (Dynamic programming)简单递推
- 13IP输入框IP ADDRESS
- Visual C++ 菜单
- python字典实现switch功能