longhuiping 发表于 2013-2-4 20:00:10

实现类似于google,baidu的搜索提示功能,带有上下键选择功能

以前一直在用ajax实现异步调用,但一直没有时间到带有搜索提示的功能,前几天由于工作需要,终于写了一个,整理了一下代码,我使用的技术是js+dwr2.0,在下面的js中只需要调用一个后台的方法即可.为了更好的演示,所以用一个数组代替。
注:其中部分代码不是原创,但是忘了从哪down下来的了,找了半天,很郁闷,没找到,请原作者多多见谅!对了,偶弄了个附件,呵呵!
suggest.html中的代码,很简单
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>js 搜索提示</title><script language="javascript" src="suggest.js"></script><linktype="text/css" rel="stylesheet"href="suggest.css" /></head><body ><table>    <tr>      <td>            <input type="text" id="search"onkeyup="javascript:getSearchContent(event);"/><br/>            </td>      </tr>      <tr>      <td>            <div id="search_suggest" style="width:525;left:445"></div>            </td>      </tr>    </table></body></html>
suggest.css代码,down下来的
@charset "utf-8";/* CSS Document */.suggest_link {background-color: #FFFFFF;    padding: 2px 6px 2px 6px;}.suggest_link_over {    background-color: #E8F2FE;    padding: 2px 6px 2px 6px;}#search_suggest {    position: absolute;    background-color: #FFFFFF;    text-align: left;    border: 1px solid #000000;   }
suggest.js 有down的但是大部分是自己的心血,呵呵!
//搜索建议 总数var length = 0;//当前选中的搜索建议var currentSelected = -1;//获取当前鼠标所获取的行var currentOut;/***获取搜索提示信息**/function getSearchContent( evt ){var text = document.getElementById("search");var key = window.event?evt.keyCode:evt.which;if( null != currentOut ) {suggestOut(currentOut);}//向上键if( key == 38 ){if( currentSelected == -1 ){currentSelected = 0;}if( length == 0 ){currentSelected = 0;}else{if( currentSelected == 0 ){currentSelected = length - 1 ;var c = document.getElementById("suggset" + ( 0 ));c.className = 'suggest_link';}else{currentSelected = currentSelected - 1 ;}}if( null != document.getElementById("suggset" + currentSelected ) ){/** 去除索引的选中颜色 **/if( currentSelected == length - 1){var c = document.getElementById("suggset" + ( length - 1 ));c.className = 'suggest_link';}else{var c = document.getElementById("suggset" + ( currentSelected+ 1 ));c.className = 'suggest_link';}var current = document.getElementById("suggset" + currentSelected );current.className = "suggest_link_over";text.value = current.innerHTML;}return;}//向下键if( key == 40 ){if( length == 0 ){currentSelected = 0;}else{//当前选中索引为最后一个时if( currentSelected ==length - 1 ){//去除索引的选中颜色currentSelected = 0;var c = document.getElementById("suggset" + ( length - 1 ));c.className = 'suggest_link';}else{currentSelected = currentSelected + 1;}}if( null != document.getElementById("suggset" + ( currentSelected) ) ){/** 去除索引的选中颜色 **/if( currentSelected == 0){var c = document.getElementById("suggset" + ( currentSelected ));c.className = 'suggest_link';}else{var c = document.getElementById("suggset" + ( currentSelected- 1 ));c.className = 'suggest_link';}/** 添加索引的选中颜色**/var current = document.getElementById("suggset" + ( currentSelected));current.className = "suggest_link_over";text.value = current.innerHTML;}return;}if( key != 38 && key != 40 ){if( "" != text.value ){//调用ajax/dwr方法//Suggest.getSuggest( text.value,callBack );var datas = new Array();datas = "h";datas = "ha";datas = "hb";datas = "hc";datas = "hd";datas = "he";callBack( datas );currentSelected = -1;onKeySelect();}else{currentSelected = -1;map = null;noShow();}}}/** 返回结果并显示 **/function callBack( data ){if( null != data ){document.getElementById('search_suggest').style.display = '';var ss = document.getElementById('search_suggest');ss.innerHTML = "";length = data.length;var str = "";var height = 10;for( var i = 0; i < length; i++ ){var suggest = '<div id=suggset' + i +'';    suggest += 'onmouseout="javascript:suggestOut(this);" ';    suggest += ' ';    suggest += 'class="suggest_link">' + data + '</div>';    ss.innerHTML += suggest;    height += 22;}document.getElementById('search_suggest').style.height = height;}else{document.getElementById('search_suggest').style.display = 'none';}}/** 使用上下键选择搜索提示**/function onKeySelect(){if( null != document.getElementById("suggset" + currentSelected )){var current = document.getElementById("suggset" + currentSelected );setSearch(current.innerHTML);}}/** 初始化 不显示div **/function noShow(){document.getElementById('search_suggest').style.display = 'none';}//获取鼠标function suggestOver(div_value) {currentOut = div_value;var current = document.getElementById("suggset" + ( currentSelected));if( null != current ){current.className = 'suggest_link';}currentOut.className = 'suggest_link_over';currentSelected = -1;}//失去鼠标function suggestOut(div_value) {div_value.className = 'suggest_link';}//显示选中的信息function setSearch(value) {document.getElementById('search').value = value;document.getElementById('search_suggest').innerHTML = '';noShow();}
页: [1]
查看完整版本: 实现类似于google,baidu的搜索提示功能,带有上下键选择功能