📄 qinput.htc
字号:
//////////////////////////////////////////////////
//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 + -