📄 checkform.js
字号:
//-------------------------------全局变量定义-------------------------------------------
__DEBUG = true;
KEY_DOWN_OBJ = null; //按键按下时的对象
KEY_UP_OBJ = null; //按键弹起时的对象
KEY_CURRENT_OBJ = null; //按键的当前对象
CHECK_CURRENT_FORM = null; //当前被检测的表单对象
CHECK_SUBMIT_OBJECT = null; //提交控件,当该控件按下回车时,自动提交
KEY_TAB_SWITCH_ENTER= true; //标识是否允许enter 转为 tab
KEY_WRITTING = true; //标识书写状态或控制状态(enter,tab...)
KEY_OBJECT_CHANGED = false; //标识对象是否发生改变,用于IME检测
KEY_WRITTING_OBJECT = null; //正在书写内容的对象
//CLICK_LAST_OBJECT = null; //按键上次按下的对象
//CLICK_CURRENT_OBJECT= null; //按键本次按下的对象
IME_WORKING = false; //标识是否包含输入法操作
CLICK_CHECK_FLAT = false; //设置鼠标单击检测标记.
DEBUG_MESSAGE = "alert('命令行...')"; //调试窗口的命令。
CURRENT_MAX_ERR_VALUE = 0;
CURRENT_MIN_ERR_VALUE = 0;
CURRENT_MAX_ERR_LENGTH = 0;
CURRENT_MIN_ERR_LENGTH = 0;
DATE_ERR_MESSAGE = "";
TEMP_DEBUG_VAR = null;
//---------------------------------------------------------------------------------
document.onkeydown = CheckKeyDown;
document.onkeyup = CheckKeyUp;
document.onclick = CheckClick;
function GetAutoSetConfigs(FormObject)
{
var AutoSetConfig = [];
AutoSetConfig.BgColor = "";
AutoSetConfig.FontColor = "";
AutoSetConfig.AddMsg = "";
AutoSetConfig.Flat = false;
if(GetHiddenElement("NO_EMPTY",FormObject.name)!="")
{
AutoSetConfig.BgColor = GetHiddenElement("AUTO_SET_TABLE","NE_BgColor");
AutoSetConfig.FontColor = GetHiddenElement("AUTO_SET_TABLE","NE_FontColor");
AutoSetConfig.AddMsg = GetHiddenElement("AUTO_SET_TABLE","NE_AddMsg");
AutoSetConfig.Flat = true;
}
return AutoSetConfig;
}
function AutoSetTable(TableName)
{
var flat = false;
var AutoSetConfig = [];
var ObjectName = document.all(TableName);
var Length = 1;
if(ObjectName.length)
{
Length = ObjectName.length;
}
for(var k=0;k<Length;k++)
{
var Object = Length==1 ? ObjectName : ObjectName[i];
for(i=Object.rows.length-1;i>=0;i--)
{
for(j=Object.rows[i].cells.length-1;j>=0;j--)
{
var ob=Object.rows[i].cells[j];
if(ob.childNodes[0]==null) continue;
if(flat)
{
if(AutoSetConfig.BgColor!="") ob.bgColor=AutoSetConfig.BgColor;
if(AutoSetConfig.FontColor!="") ob.style.color=AutoSetConfig.FontColor;
if(ob.childNodes[0].all==null) ob.innerText +=AutoSetConfig.AddMsg;
ob.AutoSetConfig = AutoSetConfig;
flat = false;
AutoSetConfig = [];
}
else if(ob.AutoSetConfig!=null)
{
if(ob.bgColor.toLowerCase()==ob.AutoSetConfig.BgColor.toLowerCase()) ob.bgColor="";
if(ob.style.color.toLowerCase()==ob.AutoSetConfig.FontColor.toLowerCase()) ob.style.color="";
if(ob.innerText.substring(ob.innerText.length-ob.AutoSetConfig.AddMsg.length,ob.innerText.length)==ob.AutoSetConfig.AddMsg) ob.innerText =ob.innerText.substring(0,ob.innerText.length-ob.AutoSetConfig.AddMsg.length);
ob.AutoSetConfig = null;
}
if (ob.childNodes[0].all!=null)
{
AutoSetConfig = GetAutoSetConfigs(ob.childNodes[0]);
flat = AutoSetConfig.Flat;
}
}
}
}
}
function CreateOperaWindow(AutoRunOnClose,AutoRunOnOpened)
{
try
{
var flat = true;
if (!AutoRunOnClose)
{
AutoRunOnClose = "";
}
if(!AutoRunOnOpened)
{
AutoRunOnOpened = "";
}
var iCount =0;
var w = 250;
var h = 80;
var l = screen.width/2-w/2;
var t = screen.height/2 -h;
var N = "OpInBG";
var P = "width="+w+",height="+h+",left="+l+",top="+t;
var temp = window.open("about:blank",N,P);
TEMP_DEBUG_VAR = temp;
temp.document.writeln('<title>等待窗口</title><script>function unload(){try{var ReValue=window.frames[0].document.all("ReturnValue").value;var js=\''+AutoRunOnClose+'\';var openjs=\''+AutoRunOnOpened+'\';if(window.frames[0].document.all("Result").value=="操作成功!") eval(js);eval(openjs)}catch(e){}}</script>');
temp.document.writeln('<body topmargin="0" leftmargin="0" onblur="window.focus()" onunload=unload()>');
temp.focus();
//var value=showModalDialog("common/OpHtml.htm",formob,"dialogHeight:150px;dialogWidth:250px;status:no;help:no");
temp.document.writeln('<iframe name="IOPWindow" scrolling="no" src="Info_Waiting.htm" width="100%" height="100%" frameborder="0"></iframe>');
temp.focus();
temp.location.reload();
//alert(temp.frames[0].document.title=="");
while(flat)
{
iCount ++;
temp.document.title = "等待窗口("+iCount+")";
try{
if(temp.frames[0].document.all("FINISH_WAITING").value=="true")
{
flat = false;
}
}
catch(e){}
}
//temp.document.title = "等待窗口";
return temp.frames[0].name;
}
catch(e){}
}
function CreateSearchWindow(FrameName,isParent)
{
try
{
if(isParent==null) ParentObj=false;
try
{
if(FrameName=='self')
document.all("FINISH_WAITING").value = "no";
else if(!isParent)
window.frames(FrameName).document.all("FINISH_WAITING").value = "no";
else if(isParent)
parent.frames(FrameName).document.all("FINISH_WAITING").value = "no";
}
catch(e){}
var w = 250;
var h = 80;
var l = screen.width/2-w/2;
var t = screen.height/2 -h;
var N = "OpInBG";
var P = "width="+w+",height="+h+",left="+l+",top="+t;
var temp = window.open("about:blank",N,P);
if(FrameName=='self')
temp.document.writeln('<script>function load(){try{if(opener.document.all("FINISH_WAITING").value=="yes") window.close();}catch(e){}setTimeout("load()",100);}</script>');
else if(isParent)
temp.document.writeln('<script>function load(){try{if(opener.parent.frames("'+FrameName+'").document.all("FINISH_WAITING").value=="yes") window.close();}catch(e){}setTimeout("load()",100);}</script>');
else if(!isParent)
temp.document.writeln('<script>function load(){try{if(opener.window.frames("'+FrameName+'").document.all("FINISH_WAITING").value=="yes") window.close();}catch(e){}setTimeout("load()",100);}</script>');
temp.document.writeln('<title>等待窗口</title><body topmargin="0" leftmargin="0" onblur="window.focus()" onload=load()>');
temp.focus();
//var value=showModalDialog("common/OpHtml.htm",formob,"dialogHeight:150px;dialogWidth:250px;status:no;help:no");
temp.document.writeln('<iframe name="IOPWindow" scrolling="no" src="Info_Waiting.htm" width="100%" height="100%" frameborder="0"></iframe>');
temp.focus();
temp.location.reload();
return temp;
}
catch(e){}
}
function ShowAutoComplete(ModuleName,SqlString)
{
var url;
url = "performModule.jsp?ModuleName="+ModuleName;
url += "&SqlStr="+ SqlString;
var value=showModalDialog(url,"AutoComplete","dialogHeight:271px;dialogWidth:335px");
return value;
}
function RegisterForm(FormName,SubmitObjectName)
{
CHECK_CURRENT_FORM = document.getElementById(FormName);
CHECK_SUBMIT_OBJECT= document.getElementById(SubmitObjectName);
CheckAutoSetTable(); //检测是否有需要设置样式的表格
CheckFormElementProperty(); //初始化表单元素的属性
if(IME_CheckInclude())
{
document.all("div_comp").innerHTML = ShowIMEDiv();
}
if(ActionTable_CheckInclude())
{
CheckActionTable();
}
document.forms(CHECK_CURRENT_FORM.name).onsubmit = CheckForm;
}
function CheckForm(AutoSubmit)
{
if(AutoSubmit == null) AutoSubmit = false;
if (CHECK_CURRENT_FORM==null)
{
if (__DEBUG)
{
alert("未注册表单对象,请先调用:RegisterForm方法.");
}
}
for (var i=0;i<document.forms(CHECK_CURRENT_FORM.name).length;i++)
{
if (CheckFormObject(document.forms(CHECK_CURRENT_FORM.name).elements[i])==false)
{
return false;
}
}
if (AutoSubmit) //如果需要自动提交
{
document.forms(CHECK_CURRENT_FORM.name).submit();
return false;
}
return true;
}
function isDate(dateStr) {
var datePat = /^(\d{2,4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; //正则表达式
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
DATE_ERR_MESSAGE = "请输入 yyyy/mm/dd 或 yyyy-mm-dd.";
//if(__DEBUG) alert(DATE_ERR_MESSAGE);
return false;
}
year = matchArray[1]; // p@rse date into variables
month = matchArray[3];
day = matchArray[5];
if (month < 1 || month > 12) { // check month range
DATE_ERR_MESSAGE = "月份必须在1-12之间.";
//if(__DEBUG) alert(DATE_ERR_MESSAGE);
return false;
}
if (day < 1 || day > 31) {
DATE_ERR_MESSAGE = "日期必须在1-31之间.";
//if(__DEBUG) alert();
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
DATE_ERR_MESSAGE = " "+month+"月没有31日.";
//if(__DEBUG) alert(DATE_ERR_MESSAGE)
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
DATE_ERR_MESSAGE = year + "年的2月没有" + day + "天.";
//if(__DEBUG) alert(DATE_ERR_MESSAGE);
return false;
}
}
return true;
}
function isTime(dateStr) {
var datePat = /^(\d{2})(\:)(\d{2})(\:)(\d{2})$/; //正则表达式
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
DATE_ERR_MESSAGE = "正确格式为: 12:01:01";
//if(__DEBUG) alert(DATE_ERR_MESSAGE);
return false;
}
hour = matchArray[1]; // p@rse date into variables
minute = matchArray[3];
second = matchArray[5];
if (hour < 0 || hour > 23) { // check month range
DATE_ERR_MESSAGE = "小时数必须在00-23之间.";
//if(__DEBUG) alert(DATE_ERR_MESSAGE);
return false;
}
if (minute < 0 || minute > 59) {
DATE_ERR_MESSAGE="分钟数必须在00-59之间.";
//if(__DEBUG) alert(DATE_ERR_MESSAGE);
return false;
}
if (second < 0 || second > 59) {
DATE_ERR_MESSAGE = "秒钟数必须在00-59之间.";
//if(__DEBUG) alert(DATE_ERR_MESSAGE);
return false;
}
return true;
}
function DateGetMaxDay(year,month)
{
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if(isleap && month==2)
{
return 29;
}
if(month==4 || month==6 || month==9 || month==11)
{
return 30;
}
return 31;
}
function DateOpera(dateStr,OperaType,datePart,OperaValue) {
var datePat = /^(\d{2,4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; //正则表达式
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
return false;
}
if(OperaValue=="") OperaValue=0;
OperaValue = isNaN(OperaValue)==true?0:parseFloat(OperaValue);
year = parseFloat(matchArray[1]); // p@rse date into variables
month = parseFloat(matchArray[3]);
day = parseFloat(matchArray[5]);
if(OperaType == "add")
{
if(datePart=='year') year += OperaValue;
if(datePart=='month') month += OperaValue;
if(datePart=='day') day += OperaValue;
}
if(OperaType == "minus")
{
if(datePart=='year') year -= OperaValue;
if(datePart=='month') month -= OperaValue;
if(datePart=='day') day -= OperaValue;
}
if(day >0)
{
while(day > DateGetMaxDay(year,month))
{
month++;
day = day - DateGetMaxDay(year,month);
}
}
else
{
while(day <= 0)
{
month--;
day = DateGetMaxDay(year,month) + day;
}
}
if(month >0)
{
while(month > 12)
{
year++;
month -= 12;
}
}
else
{
while(month <= 0)
{
year--;
month += 12;
}
}
if(month<10) month = "0"+month;
if(day <10) day = "0"+day;
return year +"-"+month+"-"+day;
}
function Trim(SourceStr)
{
if (SourceStr == null)
{
return;
}
var LastCharSite = 0;
var FirstCharSite = 0;
for (var i = SourceStr.length ; i > 0; i--)
{
if (SourceStr.charCodeAt(i-1) != 32)
{
LastCharSite = i;
break;
}
}
for (var j = 0; j < SourceStr.length; j++)
{
if (SourceStr.charCodeAt(j) != 32)
{
FirstCharSite = j;
break;
}
}
return SourceStr.substring(FirstCharSite,LastCharSite);
}
function Split(SourceStr,SeparatorStr)
{
if(SeparatorStr == null) SeparatorStr = ",";
NewStr = SourceStr; //另做保存,用于切分时用
var Size = 0;
while (SourceStr!="")
{
var MsgSite = 0;
MsgSite = SourceStr.indexOf(SeparatorStr);
if (MsgSite == -1)
{
SourceStr = "";
}
else
{
Size ++;
SourceStr = SourceStr.substring(MsgSite + 1,SourceStr.length);
}
}
var retArray = new Array(Size);
var Index = 0;
while (NewStr!="")
{
var MsgSite = 0;
MsgSite = NewStr.indexOf(SeparatorStr);
if (MsgSite == -1)
{
retArray[Index] = NewStr;
Index++;
NewStr = "";
}
else
{
var tempstr = NewStr.substring(0,MsgSite);
NewStr = NewStr.substring(MsgSite + 1,NewStr.length);
retArray[Index] = tempstr;
Index++;
}
}
return retArray;
}
function CheckKeyUp()
{
//if(event.ctrlKey || event.altKey)
//{
// document.onmousemove= null;
// CURSOR_Hidden();
//}
KEY_UP_OBJ = event.srcElement;
KEY_CURRENT_OBJ = KEY_DOWN_OBJ;
//普通状态下用TAB辨别是否发生对象交换
if(event.keyCode == 9)
KEY_OBJECT_CHANGED = true;
//如果对象没有发生改变,设置鼠标单击检测为true.
if(!KEY_OBJECT_CHANGED)
CLICK_CHECK_FLAT = true;
else
CLICK_CHECK_FLAT = false;
if(KEY_CURRENT_OBJ == null) return;
if(KEY_CURRENT_OBJ.type == "submit") return ; //如果是提交动作,则不判断
IME_CheckKeyUp(); //检测输入法的按键事件
DCObject_CheckKeyUp();
//焦点(对象)发生改变, 检测操作的对象数据合法性。
if (KEY_CURRENT_OBJ.name!=null && KEY_OBJECT_CHANGED)
{
CheckFormObject(KEY_CURRENT_OBJ);
CheckEval(KEY_CURRENT_OBJ);
}
//焦点改变至可用控件上,检测该控件是否需要输入法或日期控件的支持
if (KEY_UP_OBJ != null && KEY_OBJECT_CHANGED)
{
if(!KEY_UP_OBJ.readOnly && !KEY_UP_OBJ.disabled)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -