积分不够,无法下载资源,请看这里! 争做班主任,享特权 ! 如何在本论坛上传大文件? 有好源码,想换点钱,来这里!
1/1页1 跳转到查看:993
发新话题 回复该主题

ajax 自动完成 中文 autocomplete 功能全部源代码 (2则)

ajax 自动完成 中文 autocomplete 功能全部源代码 (2则)


 附件: 您所在的用户组无法下载或查看附件
ajax+asp+access 实现google suggest自动完成功能功能,并支持中文
下面有两个例子:

 附件: 您所在的用户组无法下载或查看附件
 附件: 您所在的用户组无法下载或查看附件

TOP

 

jsp版本 Ajax自动完成 中文

我这个自动完成跟google suggest不一样。我重要有两个文本框。一个是输入名字。一个是输入身份证。根据输入的名字,自动显示相同名字的所有身份证。
lookup.jsp
<%@ page c language="java" import="java.sql.*" import="java.util.regex.*" import="search.db.*" import="bar.web.pub.*" errorPage="" %>
<HTML>
<HEAD>
  <title>ajax自动提示</title>
  <script language="javascript" src="../public/js/lookup.js"></script>
  <script language="javascript">
  var XMLHttpReq;

//创建XMLHttpRequest对象     
  function createXMLHttpRequest() {
  if(window.XMLHttpRequest) { //Mozilla 浏览器
      XMLHttpReq = new XMLHttpRequest();
  }
  else if (window.ActiveXObject) { // IE浏览器
      try {
      XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
      try {
      XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
  }
  }
  }
  function lookup()
        {  createXMLHttpRequest();
      var name= document.getElementById('search').value;
            var url="Lookup.shtml?S_KEHU_NAME="+name;
            XMLHttpReq.open("GET", url, true);
            XMLHttpReq.onreadystatechange=callback;
            XMLHttpReq.send(null);
           
        }
  function callback()
        {
            if(XMLHttpReq.readyState == 4)
            {
                if(XMLHttpReq.status == 200)
                {
                    mainLoop();
                }else{
                    alert("Not able to retrieve description"+XMLHttpReq.statusText);
                }
            }
        }
  function mainLoop()
  {
    //val = escape(queryField.value);
    val = document.getElementById('search').value;
    if (lastVal != val)
    {
    var xmldoc=XMLHttpReq.responseXML.documentElement;
            var xSel=xmldoc.getElementsByTagName('select');
    showQueryDiv(xSel);
    lastVal = val;
    }
    return true;
  }
  </script>
</HEAD>
<body >
  <input type="text" name="search" id="search" autocomplete="off" value="">
  <input type="text" name="S_Licence" id="S_Licence" autocomplete="off"  value=""><br>
</body>
</HTML>

lookup.js
// 下拉区背景色
var DIV_BG_COLOR = "#EEE";
// 高亮显示条目颜色
var DIV_HIGHLIGHT_COLOR = "CornflowerBlue";
// 字体
var DIV_FONT = "Arial";
// 下拉区内补丁大小
var DIV_PADDING = "2px";
// 下拉区边框样式
var DIV_BORDER = "1px solid Black";
//下拉区的宽度
var DIV_WIDTH = "150px";
//下拉区的字体大小
var DIV_F;
// 文本输入框
var queryField;
// 下拉区ID
var divName;
// IFrame名称
var ifName;
// 记录上次选择的值
var lastVal = "";
// 当前选择的值
var val = "";
// 显示结果的下拉区
var globalDiv;
// 下拉区是否设置格式的标记
var card;
var divFormatted = false;

/**
InitQueryCode 函数必须在<body onload>事件的响应函数中调用,其中;
queryFieldName 为文本框控件的ID,
hiddenDivName 为显示下拉区div的ID
*/
function InitQueryCode (queryFieldName, hiddenDivName)
{
// 指定文本输入框的onblur 和 onkeydown 响应函数
queryField = document.getElementById(queryFieldName);
//queryField.onblur = hideDiv;
//queryField.onkeydown = keypressHandler;

// 设置 queryField 的 autocomplete 属性为"off"
queryField.autocomplete = "off";
// 如果没有指定的hiddenDivName,取默认值"querydiv"
if (hiddenDivName)
{
  divName = hiddenDivName;
}
else
{
  divName = "querydiv";
}

// IFrame 的 name
ifName = "queryiframe";

}
/**
获取下拉区的div,如果没有则创建
*/
function getDiv (divID)
{
if(!globalDiv)
{
  // 如果div 在页面中不存在,创建一个新的div
  if(!document.getElementById(divID))
  {
    var newNode = document.createElement("div");
    newNode.setAttribute("id",divID);
    document.body.appendChild(newNode);
  }
 
  // globalDiv设置为div 的引用
  globalDiv = document.getElementById(divID);
 
  // 计算div左上角的位置
  card= document.getElementById("S_Licence");
  var x = card.offsetLeft;
  var y = card.offsetTop + card.offsetHeight;
  var parent = card;
  while (parent.offsetParent)
  {
    parent = parent.offsetParent;
    x += parent.offsetLeft;
    y += parent.offsetTop;
  }
 
  // 如果没有对div 设置格式,则为其设置相应的显示样式
  if(!divFormatted)
  {
    globalDiv.style.backgroundColor = DIV_BG_COLOR;
    globalDiv.style.fontFamily = DIV_FONT;
    globalDiv.style.padding = DIV_PADDING;
    globalDiv.style.border = DIV_BORDER; 
    globalDiv.style.width = DIV_WIDTH;     
    globalDiv.style.fontSize = DIV_FONTSIZE;
 
 
    globalDiv.style.position = "absolute";
    globalDiv.style.left = x + "px";
    globalDiv.style.top = y + "px";
    globalDiv.style.visibility = "hidden";
    globalDiv.style.zIndex = 10000;
 
    divFormatted = true;
  } 
}

return globalDiv;
}

/**
根据返回的结果集显示下拉区
*/
function showQueryDiv (resultArray)
{
// 获取div 的引用
var div = getDiv (divName);

// 如果div中有内容,则删除
while (div.childNodes.length > 0)
{
  div.removeChild(div.childNodes[0]);
}
// 依次添加结果
for (var i = 0; i < resultArray.length; i++)
{
  //每一个结果也是一个div
  var result = document.createElement("div");
  // 设置结果div的显示样式
  result.style.cursor = "pointer";
  result.style.padding = "2px 0px 2px 0px";
  // 设置为未选中
  _unhighlightResult(result);
  // 设置鼠标移进,移出等事件响应函数
  result.onmousedown = selectResult;
  result.onmouseover = highlightResult;
  result.onmouseout = unhighlightResult;
 
  // 结果的文本是一个span
  var result1 = document.createElement("span");
  // 设置文本span的显示样式
  result1.className = "result1";
  result1.style.textAlign = "left";
  result1.style.f;
  result1.innerHTML = resultArray.childNodes[0].firstChild.nodeValue;;
 
  // 将span添加为结果div的子节点
 
result.appendChild(result1);
 
  // 将结果div添加为下拉区的子节点
  div.appendChild(result);
}

// 如果结果集不为空,则显示,否则不显示
showDiv(resultArray.length > 0);
}

/**
用户单击某个结果时,将文本框的内容替换为结果的文本,
并隐藏下拉区
*/
function selectResult()
{
_selectResult(this);
}

// 选择一个条目
function _selectResult(item)
{
var spans = item.getElementsByTagName("span");
if (spans)
{
  for (var i = 0; i < spans.length; i++)
  {
    if (spans.className == "result1")
    {
    card.value = spans.innerHTML;
    lastVal = val = escape(card.value);
    mainLoop();
    card.focus();
    showDiv(false);
    return;
    }
  } 
}
}

/**
当鼠标移到某个条目之上时,高亮显示该条目
*/
function highlightResult()
{
_highlightResult(this);
}

// 高亮显示条目
function _highlightResult(item)
{
item.style.backgroundColor = DIV_HIGHLIGHT_COLOR;
}

/**
当鼠标移出某个条目时,正常显示该条目
*/
function unhighlightResult()
{
_unhighlightResult(this);
}

// 正常显示条目
function _unhighlightResult(item)
{
item.style.backgroundColor = DIV_BG_COLOR;
}

/**
显示/不显示下拉区
*/
function showDiv(show)
{
var div = getDiv(divName);
if (show)
{
  div.style.visibility = "visible";
}
else
{
  div.style.visibility = "hidden";
}
adjustiFrame();
}

/**
隐藏下拉区
*/
function hideDiv ()
{
showDiv(false);
}

/**
调整IFrame的位置,这是为了div 可能会显示在输入框后面的问题
*/
function adjustiFrame()
{
// 如果没有IFrame,则创建
if (!document.getElementById(ifName))
{
  var newNode = document.createElement("iFrame");
  newNode.setAttribute("id",ifName);
  newNode.setAttribute("src","javascript:false;");
  newNode.setAttribute("scrolling","no");
  newNode.setAttribute("frameborder","0");
  document.body.appendChild (newNode);
}

iFrameDiv = document.getElementById (ifName);
var div = getDiv (divName);

// 调整IFrame的位置与div重合,并在div的下一层
try
{
  iFrameDiv.style.position = "absolute";
  iFrameDiv.style.width = div.offsetWidth;
  iFrameDiv.style.height = div.offsetHeight;
  iFrameDiv.style.top = div.style.top;
  iFrameDiv.style.left = div.style.left;
  iFrameDiv.style.zIndex = div.style.zIndex - 1;
  iFrameDiv.style.visibility = div.style.visibility;
}
catch(e)
{
}
}

/**
文本输入框的onkeydown响应函数
*/
function keypressHandler (evt)
{

// 获取对下拉区的引用
var div = getDiv(divName);

// 如果下拉区不显示则什么也不做
if(div.style.visibility == "hidden")
{
  return true;
}

// 确保evt是一个有效的事件
if (!evt && window.event)
{
  evt = window.event;
}
var key = evt.keyCode;

var KEYUP = 38;
var KEYDOWN = 40;
var KEYENTER = 13;
var KEYTAB = 9;

// 只处理上下键,回车键和Tab键的响应
if ((key != KEYUP) && (key != KEYDOWN) && (key != KEYENTER) && (key != KEYTAB))
{
  return true;
}
var selNum = getSelectedSpanNum(div);
var selSpan = setSelectedSpan(div,selNum);
// 如果键入回车和Tab,则选择当前选择条目
if ((key == KEYENTER) || (key == KEYTAB))
{
  if (selSpan)
  {
    _selectResult(selSpan);
  }
}
else
{
  if (key == KEYUP)
  {
    selSpan = setSelectedSpan (div,selNum - 1);
  }
  if (key == KEYDOWN)
  {
    selSpan = setSelectedSpan (div,selNum + 1);
  }
  if (selSpan)
  {
    _highlightResult(selSpan);
  }
}

// 显示下拉区
showDiv(true);
return true;
}

/**
获取当前选中的条目的序号
*/
function getSelectedSpanNum(div)
{
var Count = -1;
var spans = div.getElementsByTagName("div");
if (spans)
{
  for (var i = 0; i < spans.length; i++)
  {
    Count++;
    if (spans.style.backgroundColor != div.style.backgroundColor)
    {
    return Count;
    }
  }
}

return -1;
}

/**
选择指定序号的结果条目
*/
function setSelectedSpan(div, spanNum)
{
var count = -1;
var thisSpan;
var spans = div.getElementsByTagName("div");
if(spans)
{
  for(var i = 0; i < spans.length; i++)
  {
    if(++count == spanNum)
    {
    _highlightResult(spans);
    thisSpan = spans;
    }
    else
    {
    _unhighlightResult(spans);
    }
  }
}

return thisSpan;
}

/**
回车当tab键
*/
function document.onkeydown() 

    if (event.keyCode == 13) 
  event.keyCode = 9; 

后台Lookup.java
package com.jh.mysv;

import com.jh.svlt.cBaseSvlt;
import com.jh.svlt.svlt_all;
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import search.db.*;
import javax.servlet.http.*;
import java.io.IOException;
import javax.servlet.ServletException;

public class Lookup extends cBaseSvlt {
    public void todo() {
   
        //处理方法参数
        String name = bar.web.pub.fun.isoToGBK(request.getParameter("S_KEHU_NAME"));
        String sql = null;
        StringBuffer xml = new StringBuffer("<?xml version=\"1.0\" encoding=\"GBK\" ?>");

        xml.append("<selects>");
        sql = "select S_KEHU_NAME,S_LICENCE";
        sql += " from T_KEHU where S_KEHU_NAME like '%' || ? || '%'";

        proc pr = new proc();
        pr.addParam("1", param.TYPE_VARCHAR2, name, param.IN);
        pr.setNotProc();
        pr.setProcname(sql);
        rowSet rs = pr.executeRowSet();
        try {
            while (rs.next()) {
                //创建响应字串
                xml.append("<select>");
                xml.append("<text>" + rs.getString("S_LICENCE") + "</text>");
                xml.append("</select>");
            }
            xml.append("</selects>");
   
            response.setContentType("text/xml");
            response.getWriter().write(xml.toString());
        } catch (Exception e) {
            System.out.println(e.getStackTrace());
        }
    }
}
最后编辑asp.net 最后编辑于 2008-05-22 07:49:03

TOP

 

回复: ajax 自动完成 中文 autocomplete 功能全部源代码 (2则)

还可以参考一下这个:

利用ajax实现自动完成(中文版)




TOP

 

回复:ajax 自动完成 中文 autocomplete 功能全部源代码 (2则)

學習中

TOP

 

...确实不错

TOP

 

...确实不错

TOP

 

ajax真的不错啊!支持楼主

TOP

 

不错不错

TOP

 
1/1页1 跳转到
发表新主题 回复该主题