⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qinput.htc

📁 HTC,demo WEB用于。 超大型
💻 HTC
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////
//Title: 快速录入组件
// Date: 2003-12-05 
/////////////////////////////////////////////////////
<public:component name="QInput" urn="QInput">
/////////////////////////////////////////////

/**
 * 本组件为快速录入字典内容而开发,可接受XML文件或XML DOM对象作为数据源
 * 通过设置XML数据源中相应节点属性作为查询关键字来对XML数据源中对应节点的数据进行查询
 * 得到快速选择下拉框中的选择内容
 */

///////////////////////////////////////////////////////

/////////property定义/////////////////////////////////

<public:property name="xmlSource" put="putXMLSource" get="getXMLSource"/>//QInput的的数据源

<public:property name="value" get="getValue" put="putValue"/>//QInput的value值
<public:property name="text" get="getText" put="putText"/>//QInput的text值
<public:property name="caption" put="putCaption"/>//QInput的caption
<public:property name="readOnly" put="putReadOnly" get="getReadOnly"/>//设置QInput的readOnly属性

<public:property name="codeCol" put="putCodeCol"/>//XML数据源value值
<public:property name="textCol" put="putTextCol"/>//XML数据源text值

<public:property name="top" put="putTop"/>//QInput距离window顶端距离
<public:property name="left" put="putLeft"/>//QInput距离window左端距离
<public:property name="width" put="putWidth"/>//QInput宽度
<public:property name="height" put="putHeight"/>//QInput高度

<public:property name="Lwidth" put="putLwidth"/>//快速录入窗口宽度
<public:property name="Lheight" put="putLheight"/>//快速录入窗口高度
<public:method name="getAttribute" />//获取当前选择内容所在r行的属性值
<public:method name="refresh" />//

<public:event name="onItemSelected" id="evtonItemSelected"/>//当用户选择了下拉框内的内容的时候触发该事件

<public:property name="init" put="initialize"/>///行为属性 该属性负责全局变量的初始化操作

//脚本封装
///////////////////////////////

<script language="JavaScript">

  
    var objXMLDoc; //XMLDOM
    var oCurNodesList;//当前操作的r序列对象
    var oCurR;//当前选中内容所在的r行对象
    var listInnerHTML;//下拉框内html        

    var objInput; // input对象
    var oCaption = null;//QInput标题对象
    var vReadOnly = false;//readOnly属性,默认为false

    var vCode,vText;//XML接点属性名
    var vTop = 0,vLeft = 0,vWidth = 80,vHeight = 20;
    var iCode,iText;//QI的value和text

    var Lheight = 5;//select的高度 默认5
    var Lwidth = width;//select的宽度
    var vCaption = "";//QInput的标题
    var objList;//select对象
    var dicListAppearFlag = false;//快速选择下拉框是否出现标志
    var firstSelectedFlag = true;//第一次选中下拉框标志
    var boolKeyUpDownBlur = false;
    var vKeyCode = "";//当前用户输入的关键字
    var strXSLT;
    var boolArrowDownOnInput = false;

    function findNode(strText,allFlag){//返回属性值包含strText(从左边第一个字符开始)的r行集合

      var objRNode;
      var objNodeList;
      var strAttName;   
      var tmpLength;   
      
      objRNode = objXMLDoc.selectSingleNode("/*/r");      
      if(objRNode == null) return;
      if(typeof(allFlag)=="undefined") allFlag = false;
      tmpLength = objRNode.attributes.length;          
      
      for(var i = 0; i < tmpLength; i++){//循环r行的所有属性
        if(allFlag){//完全匹配
          objNodeList = objXMLDoc.selectNodes("/*/r[@" + objRNode.attributes(i).name + "='" + strText + "']");
          if(objNodeList && objNodeList.length > 0){
						strXSLT = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:template match="/"><xsl:for-each select="/*/*"><xsl:choose><xsl:when test="@' + objRNode.attributes(i).name + ' = \"' + strText + '\""><option><xsl:attribute name="value"><xsl:value-of select="@' + vCode + '"/></xsl:attribute><xsl:value-of select="@' + vText + '"/></option></xsl:when></xsl:choose></xsl:for-each></xsl:template></xsl:stylesheet>';
						break;
          }
        }else{//左包含        
          objNodeList = objXMLDoc.selectNodes("/*/r[contains(@" + objRNode.attributes(i).name + ",'" +  strText + "')]");
          
          
          if(objNodeList && objNodeList.length > 0){
						strXSLT = "<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'><xsl:output method='html'/><xsl:template match='/'><xsl:for-each select='/*/*'><xsl:choose><xsl:when test='contains(@" + objRNode.attributes(i).name + ",\"" +  strText + "\")'><option><xsl:attribute name='value'><xsl:value-of select='@" + vCode + "'/></xsl:attribute><xsl:value-of select='@" + vText + "'/></option></xsl:when></xsl:choose></xsl:for-each></xsl:template></xsl:stylesheet>";
						break;
          }          
        }        
      }
      
      if(!strText || strText.length == 0){
				strXSLT = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:template match="/"><xsl:for-each select="/*/*"><option><xsl:attribute name="value"><xsl:value-of select="@' + vCode + '"/></xsl:attribute><xsl:value-of select="@' + vText + '"/></option></xsl:for-each></xsl:template></xsl:stylesheet>';
      }
      
      if(!objNodeList || objNodeList.length == 0){
				strXSLT = "";
				oCurNodesList = null;
				oCurR = null;
				return(-1);
      }else{
				oCurNodesList = objNodeList;//保存当前记录集合
				return(0);
      }
    }

  ////////////////////////////////////////////////////
    
    function onObjInputLostFocus(){//当objInput失去焦点时触发该方法    
			var intFindResult;
			
			if(boolArrowDownOnInput) return;
      if(dicListAppearFlag){//下拉框可见        
        //debugger;
        if(element.contains(window.document.activeElement)) return;
        
        if(event.srcElement.tagName!="INPUT"){
          hideList();
        }
        if(objInput.value){//
          intFindResult = findNode(objInput.value,true);        
          if(intFindResult == -1){
            
            if(dicListAppearFlag){             
              hideList();
            }
            
            alert("输入内容不正确");
            objInput.value = "";
            objInput.focus();
          }else{//
            if(objList){
              objList.focus();
            }
          }
        }
      }else{//下拉框不可见        
        if(objInput.value){
					
					//debugger;
          intFindResult = findNode(objInput.value,true);
          if(intFindResult == -1){
            alert("输入内容不正确");
            objInput.select();
          }
        }
      }
    }
    
    function hideList(){//使下拉框不可见      
      oList.style.visibility = "hidden";
      dicListAppearFlag = false;  
      boolArrowDownOnInput = false;         
    }

    function ifShowList(){//当在objInput上面按键时决定是否出现下拉框
			var strInnerHTML;
			
      vKeyCode = objInput.value;//保存用户当前的录入查询关键字
			////////hzh 2004-04-22/////////
			evtonItemSelected.fire();
			//////////////////////
			if(event.keyCode=="27"){//按下了Esc键
			  objInput.value = "";
			  iText = "";
        oCurR = null;
			}
      if(vKeyCode=="" && (event.keyCode=="8" || event.keyCode=="46")){//用户按下backspace键或del键并且input内容为空
        if(dicListAppearFlag) hideList();
        ////hzh 2004-04-22 add//////////////
        iText = "";
        oCurR = null;
        //////////////////////
        return;
      }

      if(event.keyCode != "13"){//根据输入关键字进行查询      
					if(objInput.value != ""){//输入非空
						findNode(objInput.value);          
					}else{
						return(-1);
					}
          
          if(oCurNodesList && oCurNodesList.length == 0){
            hideList();
            return;
          }         
					
					strInnerHTML = getList(oCurNodesList);                    
					if(strInnerHTML.toString() == "-1"){
					
					  hideList();
						if(element.contains(window.document.activeElement) || element == window.document.activeElement){
						}else{
							alert("输入内容不正确");
              objInput.focus();
						}
						
					}else{
						oList.innerHTML = getList(oCurNodesList);                    
						objList = oList.childNodes(0);//objList为下拉框中的select          
						objList.onkeydown = onKeyPressSelect;//处理按键事件      
						objList.onclick = clickList;//处理select的鼠标单击事件        
						objList.onblur = onListLostFocus;//当select失去焦点的时候触发该事件  
						oList.style.visibility = "visible";          
						showList();
					}                
      }     
    }
    
    function onKeyPressSelect(){//处理select的按键事件   
      event.cancelBubble = true;   
      if(event.keyCode == "8" || event.keyCode =="27"){//如果按下了backspace键
         objInput.focus();
         return;
      }      
      saveSelectValue();//保存选择      
    }
    
    function onClickSelect(){//处理select的鼠标单击事件
      saveSelectValue();//保存选择
    }
    
    function onListLostFocus(){//处理select失去焦点    
      var intReturn;
      /////hzh 2004-04-23////////////////////////
      if(objInput.value){//输入框内容非空
        intReturn = findNode(objInput.value,true);
        if(intReturn == -1){//没找到任何记录
          objInput.value = "";
          objInput.focus();
        }else if(intReturn == 0){//找到一条记录
          getRByIndexInCurNodesList(0);
          if(dicListAppearFlag)
            hideList();
            return;
        }
      }else{//objInput内容为空
        if(dicListAppearFlag)
            hideList();
      }
    } 
    
   
  
    function checkNodeByInputValue(){//通过input内输入的内容判断是否能在字典XML数据集中找到记录
    
    }
    

    function saveSelectValue(){//保存当前选中的值

      if(dicListAppearFlag){      
        try{        
          if(objList.selectedIndex!=-1){ 
            if(event.keyCode=="40"){
              findNode(vKeyCode);
              getRByIndexInCurNodesList(objList.selectedIndex);
              objInput.value = objList.options[objList.selectedIndex+1].text; 
              event.keyCode = 0;  
            }//End of if
            
            if(event.keyCode=="38"){
              findNode(vKeyCode);
              getRByIndexInCurNodesList(objList.selectedIndex);
  	          objInput.value = objList.options[objList.selectedIndex-1].text;    	          
  	          
  	          event.keyCode = 0;
  	        }//End of if
          }//End of if
          
        }catch(e){
          //错误描述: select越界 处理方式:丢弃
        }//End of try
        
        ////////////////////////////////////////////////////////////
        if(event.keyCode=="13"){
          try{            
            iCode = objList.options[objList.selectedIndex].value;
            iText = objList.options[objList.selectedIndex].text; 
            objInput.value = iText;
            findNode(vKeyCode);
            getRByIndexInCurNodesList(objList.selectedIndex);  
            /////////hzh 2004-04-22///////
            evtonItemSelected.fire();
            ////////////////
            hideList();
          }catch(e){
            //错误丢弃
          }//End of try
          event.keyCode = 0;
        }//End of if
        /////////////////////////////////////////////////////////////////
      }
    }
    
  function showList(){ //使下拉框出现
    
    if(!objList) return(-1);
    
    objList.runtimeStyle.width = Lwidth;//设置下拉框宽度
    //if(objInput.value=="") return;//输入框为空,返回
    
    var aimKey = objInput.value;//查询关键字
    locationQInput();//定位oList
    oList.style.visibility = "visible";
    dicListAppearFlag = true;
  }  

  function onInputKeyDown(){//处理objInput的onkeydown事件
    event.cancelBubble = true;  
    if(event.keyCode=="40"){//下光标键
      boolArrowDownOnInput = true;
      ///hzh 2004-04-18 add///////////////
      if(objInput.value == ""){//objInput为空则列出所有条目
      ///add end/////////////////
        oCurNodesList = objXMLDoc.selectNodes("/*/r");
        strXSLT = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:template match="/"><xsl:for-each select="/*/*"><option><xsl:attribute name="value"><xsl:value-of select="@' + vCode + '"/></xsl:attribute><xsl:value-of select="@' + vText + '"/></option></xsl:for-each></xsl:template></xsl:stylesheet>';
      //////////////////////////////////
      }else{//objInput不为空则按当前key进行查询
        findNode(objInput.value);
      }
      /////////////////////////////////
      if(!oCurNodesList){
        hideList();
        return;
      }
      //debugger;
      if(oCurNodesList && oCurNodesList.length == 0) return;
      oList.innerHTML = getList(oCurNodesList);   
      /////////////////////////////////
      objList = oList.childNodes(0);//objList为下拉框中的select          
			objList.onkeydown = onKeyPressSelect;//处理按键事件      
			objList.onclick = clickList;//处理select的鼠标单击事件        
			objList.onblur = onListLostFocus;//当select失去焦点的时候触发该事件  
			oList.style.visibility = "visible";    
			////////////////////
      showList();
      boolKeyUpDownBlur = true;    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -