// JavaScript Document var debug = true; /************************************************ * 创建LLn_Control中params参数所需的json结构 * ************************************************/ function makeJson(paraml, params) { var jsonArr = new Array(); for (var i = 0; i < paraml.length; i++) jsonArr.push(paraml[i]); for (var i = 0; i < params.length; i++) jsonArr.push({ ids: [params[i]], max: 9999999999, min: -9999999999 }); return jsonArr; } function pageWidth() { return window.innerWidth != null? window.innerWidth: document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth:document.body != null? document.body.clientWidth:null; } function pageHeight() { return window.innerHeight != null? window.innerHeight: document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight:document.body != null? document.body.clientHeight:null; } /************************************************ * 通用多参数多范围控制器 * ************************************************ * >params为json数组,其中: * * >params[n].ids为该系列输入框的id的数组 * * >params[n].min和params[i].max为该系列输入 * * 框的输入范围 * * >output为输出框id数组 * * >func为执行操作的函数 * ************************************************/ LLn_Control = function(params, output, func) { var inputs = new Array(); var outputs = new Array(); var fomula = func; for (var i = 0; i < params.length; i++) { inputs[i] = { objs: new Array(), max: params[i].max, min: params[i].min } for (var j = 0; j < params[i].ids.length; j++) { inputs[i].objs[j] = document.getElementById(params[i].ids[j]); if (!inputs[i].objs[j]) alert("无法找到输入框"+params[i].ids[j]); } } for (var i = 0; i < output.length; i++) { outputs[i] = document.getElementById(output[i]); if (outputs[i] == null) alert("无法找到输出框"+output[i]); outputs[i].readOnly = true; } this.calc = function() { // 检测变量 var values = new Array(); // 一维参数表 var bQuit = false; var outValues = new Array(); for (var i = 0; i < outputs.length; i++) outValues[i] = outputs[i].value; for (var i = 0; i < inputs.length; i++) { var max = inputs[i].max; // 上限 var min = inputs[i].min; // 下限 var lastValue = min; for (var j = 0; j < inputs[i].objs.length; j++) { var v; if (inputs[i].objs[j].type == "checkbox") v = inputs[i].objs[j].checked ? 1 : 0; else v = parseFloat(inputs[i].objs[j].value); if (!isNaN(v) && v >= lastValue && v <= max) { // 通过检验,则加入参数表 values.push(v); lastValue = v; } else { bQuit = true; break; } } if (bQuit) break; } if (!bQuit) fomula(values, outputs); else { for (var i = 0; i < outputs.length; i++) outputs[i].value = ""; } for (var i = 0; i < outputs.length; i++) if (outputs[i].value != outValues[i]) if (outputs[i].onchange) outputs[i].onchange(); } // 附加事件处理 var c = 0; if (/msie/i.test(navigator.userAgent)) { for (var i = 0; i < inputs.length; i++) for (var j = 0; j < inputs[i].objs.length; j++) inputs[i].objs[j].onpropertychange = this.calc; } else { for (var i = 0; i < inputs.length; i++) for (var j = 0; j < inputs[i].objs.length; j++) { inputs[i].objs[j].addEventListener("input",this.calc,false); inputs[i].objs[j].onchange = this.calc; c++; } } } /********************************************** * 单范围多参数运算控件 * ********************************************** * paramA为输入限定值的输入框ID * * minvalue和maxvalue分别为输入的下限和上限 * * output为输入结果的对话框数组 * * func为计算函数 * **********************************************/ L_Control = function(paramA, params, minvalue, maxvalue, output, func) { LLn_Control( makeJson([{ids:[paramA], min:minvalue, max:maxvalue}], params), output, function(v, o) { func(v[0], v.slice(1), o);} ); } /********************************************** * 单范围多参数运算控件 * ********************************************** * paramA为输入起始值的输入框ID * * paramB为输入终止值的输入框ID * * minvalue和maxvalue分别为输入的下限和上限 * * output为输入结果的对话框数组 * * func为计算函数 * **********************************************/ LL_Control = function(paramA, paramB, params, minvalue, maxvalue, output, func) { LLn_Control( makeJson([{ids:[paramA, paramB], min:minvalue, max:maxvalue}], params), output, function(v, o) { func(v[0], v[1], v.slice(2), o);} ); } /********************************************** * 双范围多参数运算控件 * ********************************************** * 》paramA为输入第一个参数的输入框ID * * 》paramB为输入第一个参数的输入框ID * * 》params为其它无限制参数输入框ID数组 * * 》minvalue1和maxvalue1分别为 * * paramA输入的下限和上限 * * 》minvalue2和maxvalue2分别为 * * paramB输入的下限和上限 * * 》output为输入结果的对话框数组 * * 》func为计算函数 * **********************************************/ LL2_Control = function(paramA, paramB, params, minvalue1, maxvalue1, minvalue2, maxvalue2, output, func) { LLn_Control( makeJson([{ids:[paramA], min:minvalue1, max:maxvalue1}, {ids:[paramB], min:minvalue2, max:maxvalue2}], params), output, function(v, o) { func(v[0], v[1], v.slice(2), o);} ); } /********************************************** * 总数计算控件 * ********************************************** * 》source为被统计输入框ID数组 * * 》output为输入结果的输入框ID * **********************************************/ TotalBox = function(source, output) { var s = new Array(); for (var i = 0; i 0) { var hiddenTab = document.createElement("input"); hiddenTab.type = "hidden"; hiddenTab.id = id; for (var i = 0; i < radios.length; i++) { if (radios[i].checked) hiddenTab.value = radios[i].value; break; } radios[0].parentNode.appendChild(hiddenTab); this.change = function() { for (var i = 0; i < radios.length; i++) if (radios[i].checked) { var htab = document.getElementById(hid); htab.value = radios[i].value; if (htab.onchange) htab.onchange(); break; } } for (var i = 0; i " + "" + "◇ "+title + "" + "X" + "" + "