ERP JS(集合):javaScript

//**----------------------------------------------------------------------------
//** Function:common.js
//** Copyright (c) ----------Dongguan Zensee Printing Ltd--------------------
//** Creator: IT_Micro
//** Create date: 2006/03/23
//** Modify:
//** Modify date:
//** Description: 常用JavaScript函數
//** version: version 1.001(Revise an version to increase by 0.001)
//**----------------------------------------------------------------------------


/*==============================================================================
description:打開補發郵件頁面
parameters:
 name: form_id   value: 表單ID.
 name: serialno   value: 流水號.
 name: type    value: 類型.
 name: isAgainSend  value: 是否是補發郵件.
================================================================================*/
function openEditSendMail(form_id,serialno,type,isAgainSend)
{
 window.showModalDialog("/NewFrame/WorkFlow/WF_Flow_Dynamic_Edit_MailContent.aspx?form_id="+form_id+"&serialno="+serialno+"&type="+type+"&isAgainSend="+isAgainSend,window.document.all.hidd_session,"scroll:yes;dialogWidth:600px;status:yes;dialogHeight:525px;edge: Sunken");
}

/*==============================================================================
description:根據傳入的狀態返回不同的用戶信息
parameters:
 name: state   value: 狀態.
================================================================================*/
function getUserNameInfo(state)
{
 return strReturnValue=window.showModalDialog("/NewFrame/WorkFlow/WF_Form_Authorization_INDV.aspx?form_state="+state,"window","scroll:yes;dialogWidth:575px;status:yes;dialogHeight:425px;edge: Sunken");
}

/*==============================================================================
description:根據傳入的狀態返回不同的員工信息
parameters:
 name: state   value: 狀態.
================================================================================*/
function getEmployeeInfo(state)
{
 return strReturnValue=window.showModalDialog("/NewFrame/HR/Assess/HR_Assess_ChooseEmployee.aspx?form_state="+state,"window","scroll:yes;dialogWidth:575px;status:yes;dialogHeight:425px;edge: Sunken");
}

/*==============================================================================
description:獲取職位編碼
parameters:
 name: state   value: 狀態.
================================================================================*/
function getJobInfo(state)
{
 return strReturnValue=window.showModalDialog("/NewFrame/WorkFlow/WF_Form_Authorization_POSN.aspx?form_state="+state,"window","scroll:yes;dialogWidth:420px;status:yes;dialogHeight:430px;edge: Sunken");
}

/*==============================================================================
description:獲取部門
parameters:
 name: state   value: 狀態.
================================================================================*/
function getDeptInfo(state)
{
 return strReturnValue=window.showModalDialog("/NewFrame/WorkFlow/WF_Form_Authorization_DEPT.aspx?form_state="+state,"window","scroll:yes;dialogWidth:425pxpx;status:yes;dialogHeight:410pxpx;edge: Sunken");
}

/*==============================================================================
description:根據傳入的操作類型、表單ID、流水號打開批核窗體並進行審批
parameters:
 name: type    value: 類型.
 name: form_id   value: 表單ID.
 name: serialno   value: 流水號.
================================================================================*/
function getApproveInfo(type,form_id,serialno,obj_hidd_session)
{
 return strReturnValue=window.showModalDialog("/NewFrame/WorkFlow/WF_Interface_My_Approve_Checkup.aspx?type="+type+"&form_id="+form_id +"&serialno="+serialno,obj_hidd_session,"scroll:yes;dialogWidth:540px;status:yes;dialogHeight:425px;edge: Sunken");
}

/*==============================================================================
description:獲取用戶所選擇的角色
parameters:
 name: roles    value: 角色
================================================================================*/
function getBindingRolesInfo(roles)
{
 return strReturnValue=window.showModalDialog("/NewFrame/WorkFlow/WF_Form_Authorization_ROLE.aspx?roles="+roles,"window","scroll:yes;dialogWidth:450pxpx;status:yes;dialogHeight:480pxpx;edge: Sunken");
}

/*==============================================================================
description:獲取指定文本的光標位置
parameters:
 name: oTextBox   value: 文本框對象.
================================================================================*/
function getCursorPos(oTextBox)
{
 var qswh="@#%#^&#*$"
 oTextBox.focus();
 rng=document.selection.createRange();
 rng.text=qswh;
 var nPosition=oTextBox.value.indexOf(qswh)
 rng.moveStart("character", -qswh.length)
 rng.text="";
 return nPosition;
}

/*==============================================================================
description:設置指定文本的光標位置
parameters:
 name: oTextBox   value: 文本框對象.
 name: position   value: 光標位置.
================================================================================*/
function setCursorPosition(oTextBox,position)
{
 range=oTextBox.createTextRange();
 range.collapse(true);
 range.moveStart('character',position);
 range.select();
}

/*==============================================================================
description:判斷指定的年份是否是閏年
parameters:
 name: oYear    value: 年份.
==============================================================================*/
function isLeapYear(oYear)
{
 //如果對100整除,則再判斷是否對400整除
 if(parseInt(oYear)%100==0)
 {
  if(parseInt(oYear)%400==0)
   return true;
 }
 //否則,不對100整除,則判斷是否對4整除,如果整除,則是閏年
 else
 {
  if(parseInt(oYear)%4==0)
   return true;
 }
 
 return false;
}

/*==============================================================================
description:用正則表達式限制文本框的輸入字符的非法性(日期)
parameters:
 name: dateTimeValue    value: 要校驗的日期值.
 name: strFormat     value: 格式
==============================================================================*/
function checkCommonDataTime(dateTimeValue,strFormat)
{
 var pattern="";
 var isOtherCheck=1;
 
 var datePar=/[^/d|^//|^/-|^/:|^/s]/g;
 var dateResult=dateTimeValue.match(datePar);
 if(dateResult!=null)
 {
  alert("DateTime format error!       ");
  return false;
 } 
 
 if(strFormat.toString()=="yyyy/MM/dd HH:mm:ss")
  pattern=/^/b(/d{4}){1}(//|/-){1}([0]?[1-9]|[1][0-2]){1}(//|/-){1}([0]?[1-9]|[1-2][0-9]|[3][0-1]){1}((/s){1}([0-1]?[0-9]|[2][0-3]){1}(/:){1}([0-5]?[0-9]){1}(/:){1}([0-5]?[0-9]){1}){1}/b$/g;
 else if(strFormat.toString()=="yyyy/MM/dd HH:mm")
  pattern=/^/b(/d{4}){1}(//|/-){1}([0]?[1-9]|[1][0-2]){1}(//|/-){1}([0]?[1-9]|[1-2][0-9]|[3][0-1]){1}((/s){1}([0-1]?[0-9]|[2][0-3]){1}(/:){1}([0-5]?[0-9]){1}((/:){1}([0-5]?[0-9]){1})?){1}/b$/g;
 else if(strFormat.toString()=="yyyy/MM/dd")
  pattern=/^/b(/d{4}){1}(//|/-){1}([0]?[1-9]|[1][0-2]){1}(//|/-){1}([0]?[1-9]|[1-2][0-9]|[3][0-1]){1}/b$/g;
 else if(strFormat.toString()=="HH:mm")
 {
  pattern=/^/b([0-1]?[0-9]|[2][0-3]){1}(/:){1}([0-5]?[0-9]){1}/b$/g;
  isOtherCheck=0;
 }
 if (dateTimeValue.length>0)
 {
  var strResult=dateTimeValue.match(pattern);
  if(strResult != null)
  {
   if(isOtherCheck==1)
   {
    pattern=/(/-)/gi;
    strResult=strResult.toString().replace(pattern,"/");
    var strArrResult=leftChar(strResult,10).toString().split("/");
    var lYear=strArrResult[0];
    var lMonth=strArrResult[1];
    var lDay=strArrResult[2];

    if((lYear%4!=0 && lMonth==2 && lDay>28) || (lYear%4==0 && lMonth==2 && lDay>29))
    {
     alert("DateTime format error!       ");
     return false;
    }
    else if(((lMonth<=7 && (Math.abs(lMonth)+2)%2!=0) || (lMonth>=8 && (Math.abs(lMonth)+2)%2==0)) && lDay>31)
    {
     alert("DateTime format error!       ");
     return false;
    }
    else if(((lMonth<=7 && (Math.abs(lMonth)+2)%2==0) || (lMonth>=8 && (Math.abs(lMonth)+2)%2!=0)) && lDay>30)
    {
     alert("DateTime format error!       ");
     return false;
    }
   }
  }
  else if(strResult == null)
  {
   alert("DateTime format error!        ");
   return false;
  }
 }
 return true;
}

//設置當前光標位置控件的輸入法不可用
function control_imeMode_disabled()
{
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
}

//設置當前光標位置控件的輸入法可用
function control_imeMode_enabled()
{
 var control=window.event.srcElement;
 control.style.imeMode = "";
}

//==============================================================================
//用正則表達式限制文本框的輸入字符的非法性(英文或數字)
//==============================================================================
function controlEnglishInt_onkeypress()
{
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[^a-zA-Z0-9]/g,'');
 window.event.keyCode=code.charCodeAt(0);
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
}
function controlEnglishInt_onbeforepaste()
{
 clipboardData.setData('text',clipboardData.getData('text').replace(/[^a-zA-Z0-9]/g,''));
}
function controlRestrictEnglishInt(control)
{
 control.attachEvent('onbeforepaste',controlEnglishInt_onbeforepaste);
 control.attachEvent('onkeypress',controlEnglishInt_onkeypress);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}

//==============================================================================
//用正則表達式限制文本框的輸入字符的非法性(數字)
//==============================================================================
function controlInt_onkeypress()
{
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[^/d]/g,'');
 window.event.keyCode=code.charCodeAt(0);
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
}
function controlInt_onbeforepaste()
{
 clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''));
}
function controlRestrictInt(control)
{
 control.attachEvent('onbeforepaste',controlInt_onbeforepaste);
 control.attachEvent('onkeypress',controlInt_onkeypress);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}

//==============================================================================
//用正則表達式限制文本框的輸入字符的非法性(Code)
//==============================================================================
function controlCode_onkeypress()
{
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[^a-zA-Z0-9/-/_/./,/;/(/)/[/]/{/}///!/@/#/$/%/^/&/*/'/|//]/g,'');
 window.event.keyCode=code.charCodeAt(0);
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
}
function controlCode_onbeforepaste()
{
 clipboardData.setData('text',clipboardData.getData('text').replace(/[^a-zA-Z0-9/-/_/./,/;/(/)/[/]/{/}///!/@/#/$/%/^/&/*/'/|//]/g,''));
}
function controlRestrictCode(control)
{
 control.attachEvent('onbeforepaste',controlCode_onbeforepaste);
 control.attachEvent('onkeypress',controlCode_onkeypress);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}

//==============================================================================
//用正則表達式限制文本框的輸入字符的非法性(數字包括小數點)
//==============================================================================
function controlNumeric_onkeypress()
{
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
 var text=control.value;
 var selectText=document.selection.createRange().text;
 
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[^/d|^/.]/g,'');
 
 //如果文本框全選中, 並且當前的輸入為'0'或'.'時
 if(text==selectText)
 {
  //如果輸入"0"或"."時,強行把它改為"0."
  if(code=="." || code=="0")
  {
   control.value="0";
   setCursorPosition(control,1);
   code=".";
  }
 }
 //否則, 不是全選中時
 else
 {
  var isDot=text.match(/[/.]{1}/g);
  var pos=getCursorPos(control);
  
  //如果當前輸入時為'.', 但文本框中已經有一個小數點時,則不能再輸入小數點
  if(code=="." && text.match(/[/.]{1}/g)!=null)
   code="";
  //如果當前輸入時為'.', 但文本框中還沒有一個小數點,並且當前光標位置為第一位時,則強行把文本框的值為'0.'
  else if(code=="." && pos==0)
  {
   control.value="0"+text;
   setCursorPosition(control,pos+1);
  }
  //如果當前輸入時為'0'
  else if(code=="0")
  {
   //如果當前光標位置為0,但已經有小數點時,不能再在最前面輸入"0";
   //如: 不能在"32.225"之前再輸入"0"-->"032.225"是不允許的
   if(pos==0 && isDot!=null)
    code="";
   //如果已經有小數點,但當前光標位置大於0時
   else if(isDot!=null && pos>0)
   {
    var dotIndex=text.indexOf(".");
    
    //如果當前光標在小數點之前
    if(pos<=dotIndex)
    {
     var beforeText=leftChar(text,dotIndex);
     //如果小數點前的數為0時,但也不能再輸入"0'(如"00."是不允許的)
     if(beforeText=="0")
      code="";
    }
   }
   //如果還沒有小數點時
   else if(isDot==null)
   {
    var beforeText=leftChar(text,pos);
    //如果當前光標位置之前的值為空時,也就是光標位置為0時,噹輸入"0"時則強行改為“0.”
    if(beforeText=="")
    {
     control.value="0"+text;
     setCursorPosition(control,pos+1);
     code=".";
    }
    //如果當前光標位置之前的值為"0"時,則不能再輸入"0"(如"00"是不允許的)
    else if(beforeText=="0")
     code="";
   }
  }
  //除了以上情況以外的
  else
  {
   //已經有小數點時
   if(isDot!=null)
   {
    var dotIndex=text.indexOf(".");
    //如果當前光標位置在小點之前時
    if(pos<=dotIndex)
    {
     var beforeText=leftChar(text,dotIndex);
     //如果小數點之前的數為"0",並且當前光標在"0"的位置後,則不能再輸入任何數
     //如:"0.3"的"0'後小數點前不能再輸入任何數字("05.3"是不允許的),只能在"0"
     //的前面輸入數字("30.3","2550.3"等等);
     if(beforeText=="0" && pos>0)
      code="";
    }
   }
  }
 }
 window.event.keyCode=code.charCodeAt(0);
}
function controlNumeric_onblur()
{
 var control=window.event.srcElement;
 control.value=control.value.toString().replace(/[/.]+$/g,"");
 
 control.value=checkNumericData(control.value);
}
function checkNumericData(oValue)
{
 if(oValue==null){return}
 
 var isHaveZero=oValue.match(/[0]+/g);
 
 oValue = oValue.replace(/^[0]+/g,'');
 oValue = oValue.replace(/^[/.]+/g,'0.');
 
 if(oValue.match(/[/d]+[/.]*[^/.]*/g)!=null)
  oValue=oValue.match(/[/d]+[/.]*[^/.]*/g)[0];
 oValue = oValue.replace(/[/.]+/g,'.');
 oValue = oValue.replace(/[/.]+$/g,'');

 if(oValue=="" && isHaveZero!=null)
  oValue="0";
 return oValue;
}
function controlNumeric_onbeforepaste()
{
 var control=window.event.srcElement;
 var copyData=clipboardData.getData('text').replace(/[^/d|^/.]/g,"");
 var pos=getCursorPos(control);
 
 var beforeText=leftChar(control.value,pos);
 var backText=rightChar(control.value,control.value.length-pos);
 
 var tempData=beforeText.toString()+copyData.toString()+backText.toString();
 
 control.value=checkNumericData(tempData);
 
 clipboardData.setData('text',"");
}
function controlRestrictNumeric(control)
{
 control.attachEvent('onbeforepaste',controlNumeric_onbeforepaste);
 control.attachEvent('onkeypress',controlNumeric_onkeypress);
 control.attachEvent('onblur',controlNumeric_onblur);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}

//==============================================================================
//用正則表達式限制文本框的輸入字符的非法性(不能輸入中文)
//==============================================================================
function controlChinese_onkeypress()
{
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[/u4e00-/u9fa5]/g,'');
 window.event.keyCode=code.charCodeAt(0);
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
}
function controlChinese_onbeforepaste()
{
 clipboardData.setData('text',clipboardData.getData('text').replace(/[/u4e00-/u9fa5]/g,''));
}
function controlRestrictChinese(control)
{
 control.attachEvent('onbeforepaste',controlChinese_onbeforepaste);
 control.attachEvent('onkeypress',controlChinese_onkeypress);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}

//==============================================================================
//用正則表達式限制文本框的輸入字符的非法性(用戶名專用)
//==============================================================================
function controlUserName_onkeypress()
{
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[^a-zA-Z0-9/_/-]/g,'');
 window.event.keyCode=code.charCodeAt(0);
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
}
function controlUserName_onbeforepaste()
{
 clipboardData.setData('text',clipboardData.getData('text').replace(/[^a-zA-Z0-9/_/-]/g,''));
}
function controlRestrictUserName(control)
{
 control.attachEvent('onbeforepaste',controlUserName_onbeforepaste);
 control.attachEvent('onkeypress',controlUserName_onkeypress);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}

//==============================================================================
//用正則表達式限制文本框的輸入字符的非法性(日期格式)
//==============================================================================

//yyyy/MM/dd格式
function controlDateShort_onkeypress()
{
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";
 var text=control.value;
 var selectText=document.selection.createRange().text;
 
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[^/d|^//]+/g,'');
 
 //如果文本框全選中, 則當前字符一定要是數字
 if(text==selectText)
 {
  //如果輸入"/"時,強行把它改為空
  if(code=="/")
   code="";
 }
 //否則, 不是全選中時
 else
 {
  //當前光標位置
  var pos=getCursorPos(control);
  
  //如果超過日期總長度,則不能再輸入
  if(pos<=9)
  {
   //只有當光標位置在第4或第7位時才能輸入"/"
   if((code=="/" && pos!=4 && pos!=7) || ((pos==4 || pos==7) && code!="/"))
    code="";
   else
   {
    //當前光標為第3位時,如果輸入了數字,則把第4位的'/'一起寫入
    if((pos==3 || pos==6) && code!="/")
    {
     //如果是第6位時
     if(pos==6)
     {
      var beforeText=rightChar(control.value,1);
      
      //如果第5位是0,則第6位不能再輸入0
      if(beforeText=="0" && code=="0")
       code="";
      //如果是1,則只能輸入0或1或2
      else if(beforeText=="1" && code!="0" && code!="1" && code!="2")
       code="";
      else
      {
       control.value+=code;
       code="/";
       setCursorPosition(control,pos+1);
      }
     }
     else     
     {
      control.value+=code;
      code="/";
      setCursorPosition(control,pos+1);
     }
    }
    
    //如果是第5位時則只能輸入0或1,因為月份只有12個月;
    if(pos==5 && code!="0" && code!="1")
     code="";
    
    //如果在第8位或第9位時
    if(pos==8 || pos==9)
    {
     //獲月份
     var oMonth=substringChar(control.value,5,2);
     
     //第8位只能輸入0.1.2.3
     if(pos==8)
     {
      if(oMonth!="02")
      {
       if(code!="0" && code!="1" && code!="2" && code!="3")
        code="";
      }
      else
      {
       if(code!="0" && code!="1" && code!="2")
        code="";
      }      
     }
     //第9位時
     else if(pos==9)
     {
      //取第8位數字
      var eightChar=substringChar(control.value,8,1);
      
      if(eightChar=="0" && code=="0")
       code="";
      //如果月份為2月時,則要判斷是否潤年
      else if(oMonth=="02" && eightChar=="2")
      {
       //獲取年份       
       var oYear=leftChar(control.value,4);
       
       //如果是閏年
       if(!isLeapYear(oYear))
       {
        if(code=="9")
         code="";
       }       
      }
      else if(eightChar=="3")
      {
       //月份有31天時
       if(oMonth=="01" || oMonth=="03" || oMonth=="05" || oMonth=="07" || oMonth=="08" || oMonth=="10" || oMonth=="12")
       {
        if(code!="0" && code!="1")
         code="";
       }
       //只有30天時
       else
       {
        if(code!="0")
         code="";
       }
      }     
     }   
    } 
   }   
  }
  else
   code="";
 } 
 
 window.event.keyCode=code.charCodeAt(0);
}

//通用格式
function controlDate_onkeypress()
{
 var code=String.fromCharCode(window.event.keyCode);
 code=code.replace(/[^/d|^//|^/-|^/:|^/s]/g,'');
 window.event.keyCode=code.charCodeAt(0);//返回字符串指定位置
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";//輸入法編輯器關閉
}
function controlDate_onbeforepaste()
{
 clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d|^//|^/-|^/:|^/s]/g,''));
}
function controRestrictDate(control)
{
 control.attachEvent('onbeforepaste',controlDate_onbeforepaste);
 control.attachEvent('onkeypress',controlDate_onkeypress);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}
//不允許輸入任何字符
function controlEmpty_onkeypress()
{
 code="";
 window.event.keyCode=code.charCodeAt(0);//返回字符串指定位置
 var control=window.event.srcElement;
 control.style.imeMode = "disabled";//輸入法編輯器關閉
}
function controlEmpty_onbeforepaste()
{
 try
 {
  clipboardData.setData('text','');
 }
 catch(e){}
}
function controRestrictEmpty(control)
{
 control.attachEvent('onbeforepaste',controlEmpty_onbeforepaste);
 control.attachEvent('onkeypress',controlEmpty_onkeypress);
 control.attachEvent('onbeforeeditfocus',control_imeMode_disabled);
}

//設置當前光標位置控件的輸入法不可用
function controlMaxLength_disabled()
{
 var control=window.event.srcElement;
 if (control != null && parseInt(control.maxLength) > 0 && control.value.length >= parseInt(control.maxLength))
  control.style.imeMode = "disabled";
 else
  control.style.imeMode = "";
}
function controlMaxLength_onbeforepaste()
{
 try
 {
  var control=window.event.srcElement;
  if (control != null && parseInt(control.maxLength) > 0 && control.value.length >= parseInt(control.maxLength))
   clipboardData.setData('text','');
  else if (control != null && parseInt(control.maxLength) > 0 )
  {
   var oldLength = control.value.length;
   var newLength = clipboardData.getData('text').length;
   if ( parseInt(oldLength) + parseInt(newLength) > parseInt(control.maxLength))
   {
    var leftLength = parseInt(control.maxLength) - parseInt(oldLength);
    clipboardData.setData('text',leftChar(clipboardData.getData('text'), leftLength));
   }
  }
 }
 catch(e){}
}
//不允許輸入任何字符,並拋出提示
function controlMaxLength_onkeypress()
{
 var control=window.event.srcElement;
 if (control != null && parseInt(control.maxLength) > 0 && control.value.length >= parseInt(control.maxLength))
 {
  code="";
  window.event.keyCode=code.charCodeAt(0);
  control.style.imeMode = "disabled";
  control.isAlert = "no";
  alert("對不起,已經達到最大長度!");
  control.isAlert = "";
  
 }
}
function controlMaxLength_onblur()
{
 var control=window.event.srcElement;
 if (control != null && parseInt(control.maxLength) > 0 && control.value.length > parseInt(control.maxLength))
 {
  if (control.isAlert != "no")
  {
   alert("對不起,此輸入框中的內容超過了所允許的最大長度!");
  }
  control.focus();
  setCursorPosition(control, control.value.length);
 }
}

 

/*==============================================================================
description:用新的字符replacestring字符串替換掉目標的findString變量的字符串
parameters:
 name: sourceString   value: 源字符串
 name: findString   value: 被替換的字符串
 name: replacestring   value: 新的字符串
 name: sign     value: 分割符
================================================================================*/
function replaceString(sourceString,findString,replacestring,sign)
{
 var strPattern=new RegExp("("+findString+"=){1}[^//"+sign+"]*","g");
 sourceString=sourceString.toString().replace(strPattern,replacestring);
 return sourceString;
}

/*==============================================================================
description:根據filter及sign, 從源字符串中獲到指定的字符串
parameters:
 name: sourceString   value: 源字符串
 name: filterString   value: 過濾項目
 name: sign     value: 分割符
================================================================================*/
function getTargetStringSign(sourceString,filterString,sign)
{
 var strReturnString="";
 var strPattern=new RegExp("//b("+filterString+"=){1}[^//"+sign+"]+","g");
 var strResult=sourceString.toString().match(strPattern);
 if(strResult!=null)
 {
  strReturnString=strResult.toString().replace(new RegExp("^("+filterString+"=){1}","g"),"");
 }
 return strReturnString;
}

/*==============================================================================
description:根據傳入的分割符(sign)及索引值, 獲取源字符串數組中相應的值
parameters:
 name: listValue    value: 源字符串
 name: sign     value: 分割符
 name: index     value: 數組索引值
================================================================================*/
function getArrayIndexValue(listValue,sign,index)
{
 try
 {
  var strArray=listValue.toString().split(sign);
  if(Math.abs(index)<=strArray.length-1)
  {
   return strArray[index];
  }else{return null;}
 }catch(e){}
}

/*==============================================================================
description:右截取字符串函數
parameters:
 name: strSourceChar   value: 源字符串
 name: length    value: 要截取的長度
================================================================================*/
function rightChar(strSourceChar,length)
{
 strSourceChar=strSourceChar.toString().substring(strSourceChar.length-length,strSourceChar.length);
 return strSourceChar;
}

/*==============================================================================
description:左截取字符串函數
parameters:
 name: strSourceChar   value: 源字符串
 name: length    value: 要截取的長度
================================================================================*/
function leftChar(strSourceChar,length)
{
 strSourceChar=strSourceChar.toString().substring(0,length);
 return strSourceChar;
}

/*==============================================================================
description:從指定開始位置截取到指定長度的字符串函數
parameters:
 name: strSourceChar   value: 源字符串
 name: start     value: 開始位置
 name: length    value: 要截取的長度
================================================================================*/
function substringChar(strSourceChar,start,length)
{
 strSourceChar=strSourceChar.toString().substring(start,Math.abs(start)+Math.abs(length));
 return strSourceChar
}

/*==============================================================================
description:去掉從後面開始到指定長度的字符串函數
parameters:
 name: strSourceChar   value: 源字符串
 name: length    value: 要去掉長度
================================================================================*/
function removeBackChar(strSourceChar,length)
{
 strSourceChar=strSourceChar.toString().substring(0,strSourceChar.length-length);
 return strSourceChar
}

/*==============================================================================
description:去掉從前面開始到指定長度的字符串函數
parameters:
 name: strSourceChar   value: 源字符串
 name: length    value: 要去掉長度
================================================================================*/
function removeFrontChar(strSourceChar,length)
{
 strSourceChar=strSourceChar.toString().substring(length,strSourceChar.length);
 return strSourceChar
}

/*==============================================================================
description:去掉左右兩邊空格字符串函數
parameters:
 name: strSourceChar   value: 源字符串
================================================================================*/
function Trim(strSourceChar)
{
 strSourceChar=LTrim(strSourceChar);
 strSourceChar=RTrim(strSourceChar);
 return strSourceChar;
}

/*==============================================================================
description:去掉左邊空格字符串函數
parameters:
 name: strSourceChar   value: 源字符串
================================================================================*/
function LTrim(strSourceChar)
{
 strSourceChar=strSourceChar.toString().replace(/^[/s|/n|/r| ]+/g,"");
 return strSourceChar;
}

/*==============================================================================
description:去掉右邊空格字符串函數
parameters:
 name: strSourceChar   value: 源字符串
================================================================================*/
function RTrim(strSourceChar)
{
 strSourceChar=strSourceChar.toString().replace(/[/s|/n|/r| ]+$/g,"");
 return strSourceChar;
}

/*==========================================================================
description:根據指定的sign字符,刪除其多余的部分
parameters:
 name: sourceChar    value: 源字符串.
 name: sign      value: 分割符.
example: ;125;35;;525;;;551;  result: 125;35;525;551
============================================================================*/
function replaceSurplusChar(sourceChar,sign)
{
 sourceChar=sourceChar.toString().replace(new RegExp("[//"+sign+"]{2,100}","g"),sign);
 sourceChar=sourceChar.toString().replace(new RegExp("^[//"+sign+"]+","g"),"");
 sourceChar=sourceChar.toString().replace(new RegExp("[//"+sign+"]+$","g"),"");

 return sourceChar; 
}

/*==============================================================================
description:四捨五入函數
parameters:
 name: numeric   value: 要四捨五入的數值.
 name: scale    value: 小數點的位數。
================================================================================*/
function Round(numeric,scale)
{
 var example="1=0;2=00;3=000;4=0000;5=00000;6=000000;7=0000000;8=00000000;9=000000000;10=0000000000;";
  example+="11=00000000000;12=000000000000;13=0000000000000;14=00000000000000;15=000000000000000;";
 if(parseInt(scale)<0 || parseInt(scale)>15)
  return numeric;
 else
 {
  var smallScale=getTargetStringSign(example,scale,";");
   smallScale="0."+smallScale+"5";
  var iIntLength=numeric.toString().replace(/[^/.]+$/g,"").length-1;
  if(iIntLength==-1)
   return numeric;
  else
  {
   numeric=parseFloat(numeric)+parseFloat(smallScale);
   if(Math.abs(scale)==0)
    numeric=leftChar(numeric,Math.abs(iIntLength));
   else
    numeric=leftChar(numeric,Math.abs(iIntLength)+Math.abs(scale)+1);
  }
 }
 return numeric;
}

/*==========================================================================
description:查看字符串裡是否含有目標字串,用sign作分隔符
parameters:
 name: sourceString   value: 源字串.
 name: filterString   value: 字串中的項目名稱.
 name: sign     value: 分割符.
============================================================================*/
function hasTargetString(sourceString,filterString,sign)
{
 //把小a-z大A-Z及數字、中文以外的所有符號找出來,並強行在其前面加'/'(下劃線除外)
 var result=filterString.match(/[^a-zA-Z0-9/u4e00-/u9fa5]/g);
 
 if(result != null)
 {
  var arrayResult=result.toString().split(',');
  for(sys_i = 0; sys_i < arrayResult.length; sys_i++)
  {
   if(arrayResult[sys_i] != "_")
   {
    var prttern=new RegExp("[//"+arrayResult[sys_i]+"]{1}","g");
    filterString=filterString.replace(prttern,"//"+arrayResult[sys_i]);
   }
  }
 }

 sourceString = sign+sourceString+sign;
 sourceString = sourceString.replace(new RegExp("^[//"+sign+"]{2,100}","g"),sign);
 sourceString = sourceString.replace(new RegExp("[//"+sign+"]{2,100}$","g"),sign);
 var strPattern=new RegExp("[//"+sign+"]{1}("+filterString+"){1}[//"+sign+"]{1}","g");
 if(sourceString.match(strPattern))
  return true;
 
 return false;
}

/*==============================================================================
description:顛倒字符串(如:ABC----CBA)
parameters:
 name: sourceString   value: 要顛倒的字符串.
================================================================================*/
function Reverse(sourceString)
{
 if(sourceString!=null)
 {
  var newString="";
  for(i=0;i<sourceString.length;i++)
  { 
   newString=substringChar(sourceString,i,1)+newString;
  }
  sourceString=newString;
 }
 
 return sourceString; 
}

/*==============================================================================
description:貨幣格式轉換函數
parameters:
 name: sourceValue   value: 要轉換的貸幣值.
 name: firstSign    value: 要顯示的貸幣符號(如: $).
 name: splitSign    value: 每三位數之間的分隔符(如: $123,00.2).
 name: scale     value: 小數點的位數.
returns: 返回格式後的貨幣字符串值(如: $123,520,2.32)
================================================================================*/
function CurrencyFormat(sourceValue,firstSign,splitSign,scale)
{
 //先把不是數字及小數點的所有字符串去掉
 sourceValue=sourceValue.toString().replace(/[^/d|/.]/g,"");
 
 //獲取整數部分
 var int_Value=sourceValue.toString().match(/^[/d]*[^/.]/);

 //獲取是否有小數點
 var isScale=sourceValue.toString().match(/[/.]/g);
 
 //小數點後的數
 var scale_Value=null;
 
 //如果有小數點,則截取小數點後的數
 if(isScale!=null)
  scale_Value=sourceValue.toString().match(/[/d]*[^/.]+$/);
  
 var newIntValue="";
 //如果有整數部分
 if(int_Value!=null)
 {
  //字符串顛倒,以便給每隔三個數字之間加特定的符號
  int_Value=Reverse(int_Value.toString());
  
  var i=3;
  while(i>0)
  {
   newIntValue+=leftChar(int_Value,i)+splitSign;
   
   if(int_Value.length-i>0)
    int_Value=rightChar(int_Value,Math.abs(int_Value.toString().length-i));
   else
    int_Value="";
   
   if(int_Value==null || int_Value.toString().length<=0)
    i=0;
  }
  //把字符串重新倒回來
  int_Value=Reverse(removeBackChar(newIntValue,1));
 }
 
 var strScale="";
 
 //如果有小數點,如果當前的小數位數比傳入的小數點參數小,則補零
 if(scale_Value!=null)
 {

  if(scale_Value.toString().length<scale)
  {
   for(i=1;i<=scale-scale_Value.toString().length;i++)
   {
    strScale+="0";
   }
  }
  scale_Value+=strScale;
 }
 //如果沒有小數點,則根據傳入的小數點位數全部補零
 else
 {
  for(i=1;i<=scale;i++)
  {
   strScale+="0";
  }
  scale_Value=strScale;
 }
 
 var temp=firstSign+int_Value+'.'+scale_Value;
 temp=temp.toString().replace(/(null)+/g,"0");
 return temp;
}

/*==============================================================================
description:根據控件ID名返回控件(object)
parameters:
 name: id   value: 控件ID.
================================================================================*/
function getControl(id)
{
 if(id.length==0){return null};
 var ctrl;
 ctrl=eval("window.document.all."+id.toString());
 return ctrl;
}

/*==============================================================================
description:獲取指定控件的所有子控件,,返回類型為id或object
parameters:
 name: TargetPanel   value: 裝載控件的Panel.
 name: ReturnSort   value: 返回到數組中的類型(控件或控件ID).
================================================================================*/
function getAllControlId(TargetPanel,ReturnSort)
{
 var strCtrlID="";
 var ctrl_Array=new Array();
 var k=0;
 for(i=0;i<TargetPanel.children.length;i++)
 {
  var ctrl=TargetPanel.children[i];
  if(leftChar(ctrl.id,3)!="sys")
  {
   strCtrlID+=ctrl.id + ";";
   ctrl_Array[k]=ctrl;
   k++;
  }
 }
 if(ReturnSort=="id")
  return removeBackChar(strCtrlID,1);
 else if(ReturnSort=="object")
  return ctrl_Array;
}

/*==============================================================================
description:獲取指定控件的前綴為prefixList變量指定的所有子控件,
   返回類型為id或object
parameters:
 name: TargetPanel   value: 裝載控件的Panel.
 name: ReturnSort   value: 返回到數組中的類型(控件或控件ID).
 name: prefixList   value: 前綴
================================================================================*/
function getAllControlIdHavePrefix(TargetPanel,ReturnSort,prefixList)
{
 prefixList=prefixList+";";
 prefixList=prefixList.toString().replace(/[/;]+/g,"=1;");
 var strCtrlID="";
 var ctrl_Array=new Array();
 var k=0;
 for(i=0;i<TargetPanel.children.length;i++)
 {
  var ctrl=TargetPanel.children[i];
  if(leftChar(ctrl.id,3)!="sys" && getTargetStringSign(prefixList,leftChar(ctrl.id,3),";").length>0)
  {
   strCtrlID+=ctrl.id + ";";
   ctrl_Array[k]=ctrl;
   k++;
  }
 }
 if(ReturnSort=="id")
  return removeBackChar(strCtrlID,1);
 else if(ReturnSort=="object")
  return ctrl_Array;
}

/*==============================================================================
description:在數據操作頁面,防止用戶按Tab鍵跳到隱藏的服務端的保存或刪除數據
   按鈕(btn_saveServer、btn_deleteServer)時按回車鍵觸發保存或刪除操作
parameters:
 name: arrayId   value: 控件數組字符串.
 name: sign    value: 分割符.
================================================================================*/
function setEveryControlTab(arrayId,sign)
{
 if(window.event.keyCode==13)
 {
  if(event.srcElement.type!=null && event.srcElement.type=="button")
  {
   if(hasTargetString(arrayId,event.srcElement.id,sign))
    window.event.keyCode=9;
  }
  else
   window.event.keyCode=9;
 }
}

/*==========================================================================
description:根據傳入的參數打開窗體
parameters:
 name: url     value: URL地址.
 name: left     value: 左邊距.
 name: top     value: 上邊距.
 name: width     value: 窗體寬度.
 name: height    value: 窗體高度.
 name: status    value: 狀態--0,1.
 name: toolbar    value: 是否有工具條--0,1.
 name: menubar    value: 是否有菜單項--0,1.
 name: scrollbar    value: 是否有滾動條--0,1.
 name: resizable    value: 是否可改變窗體大小--0,1.
============================================================================*/
function openFrmUrl(url,left,top,width,height,status,toolbar,menubar,scrollbar,resizable)
{
 window.open(url,"window","left=" + left +",top="+ top +
 ",width=" + width + ",height="+ height +
 ",status="+status+",toolbar="+toolbar+",menubar="+menubar+",location=0,scrollbars="+
 scrollbar+",resizable="+resizable,false);
}

/*==============================================================================
description:把當前光標置於指定網格單元格
parameters:
 name: oRow     value: 網格行對象.
 name: objColumnName   value: 網各列名.
 name: oUltraWebGridName  value: 網格名稱.
================================================================================*/
function setGridFocus(oRow,objColumnName,oUltraWebGridName)
{
 oRow.getCellFromKey(objColumnName).setSelected(true);
 oRow.getCellFromKey(objColumnName).activate();
 igtbl_EnterEditMode(oUltraWebGridName);
}

/*==============================================================================
description:校驗網格的值為空時,拋出提示,並返回False
parameters:
 name: strAlertInfo    value: 提示信息
 name: oRow      value: 網格行對象
 name: objColumnName    value: 網格列Key
 name: oUltraWebGridName   value: 網格名稱.

================================================================================*/
function returnFalseByGrid(strAlertInfo,oRow,objColumnName,oUltraWebGridName)
{
 alert(strAlertInfo);
 setGridFocus(oRow,objColumnName,oUltraWebGridName);   
 
 return false;
}

/*==============================================================================
description:根據指定的網格單元格ID來獲取網格行的所在位置(索引號)
parameters:
 name: cellId     value: 網格單元格ID.
================================================================================*/
function getRowIndex(cellId)
{
 var oRowId=cellId.match(/[/_]+[/d]+[/_]+/g);
 if(oRowId!=null)
  oRowId=oRowId.toString().replace(/[^/d]/g,"");
  
 return oRowId!=null? oRowId:"";
}

/*==============================================================================
description:校驗控件時如果指定的控件的值為空時,拋出提示,並返回False
parameters:
 name: control     value: 控件對象
 name: strAlert     value: 要拋出的提示
================================================================================*/
function alertAndFocusControl(control,strAlert)
{
 alert(strAlert);
 control.focus();
 return false;
}

//校驗網格數據(EP、PP、新產品會議、R&D新產品會議專用)
function checkGridData(oGrid)
{
 if(oGrid==null){return true}
 var oRows=oGrid.Rows;
 
 if(oRows.length>0)
 {
  var oRow=null;
  
  for(var i=0;i<oRows.length;i++)
  {
   oRow=oRows.getRow(i);
   if(oRow.getCellFromKey("problem_desc").getValue()==null || Trim(oRow.getCellFromKey("problem_desc").getValue())=="")
    return returnFalseByGrid("請輸入問題總結!",oRow,"problem_desc","UltraWebGrid1");
   else if(oRow.getCellFromKey("reason_analysis").getValue()==null || Trim(oRow.getCellFromKey("reason_analysis").getValue())=="")
    return returnFalseByGrid("請輸入原因分析!",oRow,"reason_analysis","UltraWebGrid1");
   else if(oRow.getCellFromKey("solution").getValue()==null || Trim(oRow.getCellFromKey("solution").getValue())=="")
    return returnFalseByGrid("請輸入解決方案!",oRow,"solution","UltraWebGrid1");
   else if(oRow.getCellFromKey("expect_date").getValue()==null || Trim(oRow.getCellFromKey("expect_date").getValue())=="")
    return returnFalseByGrid("請輸入計劃日期!",oRow,"expect_date","UltraWebGrid1");
   else if(oRow.getCellFromKey("charge_person").getValue()==null || Trim(oRow.getCellFromKey("charge_person").getValue())=="")
    return returnFalseByGrid("請選擇負責人!",oRow,"charge_person_desc","UltraWebGrid1");
  }
 }
 
 return true;
}

/*==============================================================================
description:求兩數相乘結果
parameters:
 name: oValue1   value: 第一個數.
 name: oValue2   value: 第二個數.
================================================================================*/
function getScaleValue(oValue1,oValue2)
{
 var oReturnValue;
 
 var pos1 = 0;
 var pos2 = 0;
 
 var scale1 = 0;
 var scale2 = 0;
 
 //第一個數的小數點位置
 pos1 = oValue1.toString().lastIndexOf(".");
 //如果有小數點時
 if(pos1!= -1)
 {
  //計算第一個數的小數點長度 
  scale1 = oValue1.toString().length-pos1-1;
 }
 
 //第二個數的小數點位置
 pos2 = oValue2.toString().lastIndexOf(".");
 //如果有小數點時
 if(pos2!= -1)
 {
  //計算第二個數的小數點長度 
  scale2 = oValue2.toString().length-pos2-1;
 }
 
 //去掉小數點後的數
 oValue1 = oValue1.toString().replace(/[/.]/g,"");
 oValue2 = oValue2.toString().replace(/[/.]/g,"");
 
 //把前面所有的零去掉
 oValue1 = oValue1.toString().replace(/^[0]+/,"");
 oValue2 = oValue2.toString().replace(/^[0]+/,"");
 
 //去掉零後的空值處理
 if(oValue1=="")
  oValue1 = 0;
 if(oValue2=="")
  oValue2 = 0;
 
 //兩個整數相乘結果
 var oTotal = parseInt(oValue1) * parseInt(oValue2);
 //總的小數位數
 var oScaleTotal = parseInt(scale1) + parseInt(scale2);
 
 //如果有小數點
 if(oScaleTotal > 0)
 {
  if(oScaleTotal < oTotal.toString().length)
  {
   //小數點之前的數
   var oBeforeValue = oTotal.toString().substring(0,oTotal.toString().length - oScaleTotal);
   //小數點之後的數
   var oAfterValue = oTotal.toString().substring(oTotal.toString().length - oScaleTotal);
   
   //要輸出的結果數
   oReturnValue = oBeforeValue + "." + oAfterValue;
  }
  else
  {
   var pre_zero = "";
   if(oScaleTotal  > oTotal.toString().length)
    pre_zero = "000000000000000".substring(0,oScaleTotal  - oTotal.toString().length);
    
   oReturnValue  = "0." + pre_zero + oTotal;
  }
 }
 else
 {
  oReturnValue = oTotal ;
 }

 return oReturnValue;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值