实现textbox输入时模糊查询

时间有点紧,有点浮躁,暂时只把相关的文件挑出来看下,思路有时间再整理

1。引用的一个文件

代码
// JScript 文件

//********************************************************
//创建日期:  2010-05-5
//內容说明:  自动完成JS类
//用法:
// onkeyup = "findNames('id1','id2','1');" id1 - 自动完成文本框id,id2 - 赋值文本框id  1- 表示 id1字段模糊查询,2-  'id2字段模糊查询
// onblur = "lostfocus(this);"
//********************************************************
  
  var  inputField;        
//输入文本框
  var  outputField;       //输出文本框
  var  DivResult ;        //div
  var  xmlHttp;           //XMLHttpRequest 
  var  fontsize = 2;      //字体大小
  var  flagValue ;        //标示符(1 - 以code 检索,2 以name 检索)
  var  selectName  = "";  //鼠标选中单元格name值
  var  selectValue = "";  //鼠标选中单元格code值
  
//未选中颜色
  var  NobackColor = "#FFFFFF"
  var  NoColor 
= "#000000";
  
//选中颜色
  var backColor = "#3161CE";
  var sColor 
= "#FFFFFF";

    function findNames(inputName,outputName,flag)
//键盘出发事件
    {
        inputField  
= document.getElementById(inputName);
        outputField 
= document.getElementById(outputName);
        flagValue 
= flag;
        
//code 文本框不能用是,禁用自动填充
        if(outputField.disabled == true)
        {
          
return ;
        }
        
//创建DIV
       if(DivResult == null||typeof(DivResult)=="undefined")
       {
             DivResult 
= document.createElement("div");
             DivResult.setAttribute(
"id","divid");
             DivResult.style.cursor   
=   "default";// 设置光标  
             DivResult.onblur = function(){ lostfocus(this)}
             
             var parent 
=  inputField.parentElement;
             
if(typeof(parent)!="undefined")
             {
                parent.appendChild(DivResult);
             }
       }
       
//如果按下 向上, 向下 或 回车
        if (event.keyCode == 38 || event.keyCode == 40 || event.keyCode == 13)
        { 
           
return;
        } 
        
else if (trim(inputField.value) == "")
        {
            
//初始化div
           InitItem();
           
return;
        }
        
else
        {
            
if(window.XMLHttpRequest)
            {
                xmlHttp 
= new XMLHttpRequest();
                
if(xmlHttp.overrideMimeType)
                   xmlHttp.overrideMimeType(
"text/xml");
            }
            
else if(window.ActiveXObject)
            {
                
try
                {
                    xmlHttp 
= new ActiveXObject("Msxml2.XMLHTTP");
                }
                
catch(e)
                {
                    xmlHttp 
= new ActiveXObject("Microsoft.XMLHTTP");
                }
            }

            
if(xmlHttp == null)
                
return;
            
            xmlHttp.onreadystatechange 
= ShowResult;//设置回调函数
            xmlHttp.open("GET""AutoComplete.aspx?flag="+ escape(flagValue)+"&InputValue=" + escape(trim(inputField.value)).replace('+','%2B'), true);//编码不一致
            xmlHttp.send(null); 
        }
    }
    
    function ShowResult() 
//回调函数
    {
       
if (xmlHttp.readyState == 4)//请求完成
       {
          
if(xmlHttp.status == 200)//交易成功
          {
              
//获取xml数组
              var values = xmlHttp.responseXML.getElementsByTagName("ProductName");   
              var ids  
= xmlHttp.responseXML.getElementsByTagName("ProductCode");    
              var size 
= values.length; 
              InitItem();
//初始化div
              if(size ==0)
              {
                
return;
              }
              
//设置Div位置
              setDiv(size)
              tbl 
= document.createElement("table");
              tbl.setAttribute(
"id","AutoComplete_tbl");//设置表id
              tbl.setAttribute("cellSpacing","1");
              tbl.setAttribute(
"cellPadding","1");
                      
              tbody 
= document.createElement("tbody");
             
              var row, cell, txtNode;   
              
for (var i = 0; i < size; i++) {     //开始填充    
                 if(values[i].firstChild == null)
                 {
                     var nextNode 
= ''
                 }
                 
else
                 {
                   var nextNode 
= values[i].firstChild.data;   
                 }
                 
if(ids[i].firstChild == null)
                 {
                     var nextId 
= ''
                 }
                 
else
                 {
                   var nextId 
= ids[i].firstChild.data; 
                 }
                 row 
= document.createElement("tr");  
                 row.setAttribute(
"ReturnValue",nextId) 
                 row.setAttribute(
"ReturnName",nextNode);
                 row.onmouseover 
= function(){ mouseover(this);}
                 row.onmouseout  
= function(){ mouseout(this);}
                 row.setAttribute(
"id",i);//行数标示符 
             
                 cell 
= document.createElement("td");
                 cell.setAttribute(
"bgcolor""#FFFAFA");   
                 cell.setAttribute(
"border""0"); 
               
//  cell.setAttribute("nowrap","true");//不自动换行
                
                 font 
= document.createElement("font"); 
                 font.setAttribute(
"size",fontsize+"px");
                 
if(flagValue == "1")
                 {
                    txtNode 
= document.createTextNode(nextId +" / " + nextNode); 
                 }
                 
else if(flagValue=="2")
                 {
                    txtNode 
= document.createTextNode(nextNode +" / " + nextId); 
                 }
                 
                 font.appendChild(txtNode);
                 cell.appendChild(font) ;
                 row.appendChild(cell);
                 tbody.appendChild(row);
              } 
              tbl.appendChild(tbody)
              DivResult.appendChild(tbl);
              
//显示属性
              DivResult.style.display = ""
           }
          
else if (xmlHttp.status == 204)//请求收到,但返回信息为空
          {
             InitItem();
//初始化div
          }
        }
     }     
 
   function  InitItem()
//初始化Div
    {
        
if(DivResult != null&&typeof(DivResult)!="undefined")
        {
           DivResult.style.display 
= 'none';
           DivResult.innerHTML 
= "";
        }
        selectValue 
= "";
        selectName 
= "";
        currentIndex 
= -1;
    }

   
    
//设置页面值
    function ReturnAutoComplete(ReturnValue,ReturnName)
    {
      
if(flagValue == "1")
      {
          
//页面元素赋值
          inputField.value = ReturnValue;
          outputField.value 
= ReturnName; 
      }
      
else if (flagValue == "2")
      {
          inputField.value 
= ReturnName;
          outputField.value 
= ReturnValue; 
      }
    }
  function mouseover(obj)
  {
      
//选中颜色
      obj.style.backgroundColor = backColor; 
      obj.style.color 
= sColor;
      selectValue 
= obj.ReturnValue;
      selectName 
= obj.ReturnName;
  }
  
  function mouseout(obj)
//鼠标离开事件
  {
     
//设置默认颜色
      obj.style.backgroundColor = NobackColor; 
      obj.style.color 
= NoColor;
      selectValue 
= "";
      selectName 
= "";
  }
 function setDiv(rowSize)
//设置div位置
 {
    DivResult.style.position 
= "absolute";
    DivResult.style.border 
= "1px solid black";
    DivResult.style.top  
= inputField.getBoundingClientRect().bottom -2 + "px";
    DivResult.style.left 
= inputField.getBoundingClientRect().left - 2 + "px";
    DivResult.style.backgroundColor 
= NobackColor;
    
    
if(rowSize > 12)//设置滚动条    add 2009-6-16 on xuzhenzhong
    {
       DivResult.scrollTop 
= "0"//滚动条位置初始化 add 2009-6-16 on xuzhenzhong
       DivResult.scrollLeft = "0";
       DivResult.style.height 
= "204px";
       DivResult.style.overflow 
= "auto";
    }
    
else
    {
       DivResult.style.overflow 
= "hidden";//取消滚动条
       DivResult.style.height = "";
    }
 }
 
 
//输入文本框失去焦点
 function lostfocus(ob)
 {
   
if((ob == inputField||ob.id == 'divid')&&(selectValue != ""))
   {
      ReturnAutoComplete(selectValue,selectName);
      InitItem();
   }
   
if(document.activeElement.id != 'divid')
   {
      InitItem();
   }
 }
 
 
//删除左右两端的空格
function trim(str)
{
   
return str.replace(/(^\s*)|(\s*$)/g,'');
}



 



 

2。js牵涉到的一个AutoComplete.aspx页面内容

代码
public partial class AutoComplete : System.Web.UI.Page
{
    CommBO bo 
= new CommBO();
    
string flag = string.Empty;// 标示符
    string InputValue = string.Empty;//输入值
    string ReturnStr = string.Empty;//xml

    
// 页面加载事件
    protected void Page_Load(object sender, EventArgs e)
    {
        
try
        {
            flag 
= Request.QueryString["flag"?? "";//查询条件标示符
            InputValue = Request.QueryString["InputValue"];//输入值
            AutoCompletXML();//填充xml
            HttpContext.Current.Response.ContentType = "text/xml";
            HttpContext.Current.Response.Charset 
= "GB2312";
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
//禁用本地缓存
            HttpContext.Current.Response.Cache.SetNoStore();
            HttpContext.Current.Response.ContentEncoding 
= System.Text.Encoding.GetEncoding("UTF-8");
            HttpContext.Current.Response.Write( ReturnStr);
            HttpContext.Current.Response.End();
        }
        
catch
        { ; }
    }
    
// 填充xml
    private void AutoCompletXML()
    {
        
try
        {
            Dictionary
<stringobject> dict = new Dictionary<stringobject>();
            DataSet ds 
= new DataSet();
            
int intRowCount = 10;//默认自动完成显示最大行数
            intRowCount = Convert.ToInt32(ConfigurationManager.AppSettings["AutoCompleteRowCount"].Trim());
            
if (flag.Equals("1"))
            {
                dict.Add(
"@" + ConstMessage.TABLE_FIELD_NAME.Product.PRODUCTCODE ,"%" + InputValue +"%");
            }
            
else if (flag.Equals("2"))
            {
                dict.Add(
"@" + ConstMessage.TABLE_FIELD_NAME.Product.PRODUCTNAME ,"%"+ InputValue +"%");
            }
            
else
            {
                
return;
            }
            
//执行数据库操作
            ds = bo.GetByProduct(dict,intRowCount);
            ReturnStr 
= ds.GetXml();//生成xml
        }
        
catch
        {
            ReturnStr 
= string.Empty;
        }

    }
}

 

3。使用页面,对应的页面控件

----添加js引用

----页面添加控件

<div>
        <asp:TextBox ID="txtProductCode" runat="server" CssClass="text_Mandatory" MaxLength="25"
            AutoCompleteType="Disabled"></asp:TextBox>
        <asp:TextBox ID="txtProductName" runat="server" CssClass="text_ProductName" MaxLength="30"
            AutoCompleteType="Disabled"></asp:TextBox>
    </div>

---cs中为txtbox添加js事件

 this.txtProductCode.Attributes.Add("onkeyup", "findNames('" + this.txtProductCode.ClientID + "','" + this.txtProductName.ClientID + "','1');");
        this.txtProductName.Attributes.Add("onkeyup", "findNames('" + this.txtProductName.ClientID + "','" + this.txtProductCode.ClientID + "','2');");
        this.txtProductCode.Attributes.Add("onblur", "lostfocus(this);");
        this.txtProductName.Attributes.Add("onblur", "lostfocus(this);");

4。数据库调用层根据编码或名称的模糊查询略

 

posted @ 2010-05-06 14:50  9421  阅读(5961)  评论(0编辑  收藏  举报