求助JS效果:像百度搜索框一样,在文本框中输入字符后,自动出现提示下拉框
这个效果我思考如下:
(1)下拉框可能用<div>来做
(2)需要与服务器实时交互,因为下拉框中出现的内容从服务器端读取的(用到AJAX)
求助较为详细的代码,谢谢了
[解决办法]
前几天才做了一个,http://www.vichy.com.cn/
$(".searchText").bind("keyup", function(){ if(later!=null) clearTimeout(later); later = setTimeout(function(){ var keyword = $(".searchText").val(); if(keyword!=""){ $.get("/skin.aspx", {keywords: keyword}, function(data){ var resHtml = ""; if($(data).find("keyword").length > 0){ $(data).find("keyword").each(function(index){ resHtml += "<li onmouseover=\"rs_event.hover()\" onmouseout=\"\" onclick=\"rs_event.click('"+$(this).find("name").text()+"')\">"+$(this).find("name").text()+"</li>\n"; }); $(".search_complete").html("").append(resHtml).show(); if($(data).find("keyword").length>20){ $(".search_complete").css({height:'400px', overflowY:'auto'}); }else{ $(".search_complete").css({height:'auto'}); } }else{ $(".search_complete").hide(); } }); }else{ $(".search_complete").hide(); } }, 800) ; });
[解决办法]
能获取数据的话,剩下的就是定义div的显示样式而已,用css,我感觉用jquery中的ajax还是挺好用的
[解决办法]
其实网上有现成的js控件的.
我前不久也模仿的写过。
我去找找!
[解决办法]
学习下 哈!
[解决办法]
纯js写的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Auto Complete</title> <style type="text/css"> .hlight{background-color:Red} .normal{backgroud-color:transparent;} </style> <script language="javascript" type="text/javascript" src="../../JS/jquery-1[1].3.2.min.js"></script> <script> function doit(evt) { evt = (evt) ? evt : ((window.event) ? window.event : ""); var key = evt.keyCode?evt.keyCode:evt.which; if(key==38|key==40|key==13)return; var wd = document.getElementById("wd").value; if(wd.length==0)return; $.ajax({ url:'../../Example/AutoComplete/Handler1.ashx', type:'POST', dataType:'json', data: "wd="+wd, error:function(x){alert(x.status);}, success:function(data){$("#show_wd").html(setTable(data)).show();} }); } //设置拼接Table function setTable(jsn) { if(jsn.s.length==0|jsn.s[0]==""|jsn.s[0]=="undefined") { document.getElementById("show_wd").style.display="none"; return""; } var html ="<table id=\"tb\" width=\"100%\">"; for(var i in jsn.s) { html+="<tr onmouseover=\"hLight(this)\"><td onclick=\"completeField(this)\">"+jsn.s[i]+"</td></tr>"; } html +="<tr class=\"hlight\" style=\"display:none\"><td>"+document.getElementById('wd').value+"</td></tr>"; //alert(document.getElementById('wd').value); html +="</table>"; //setDiv();//设置DIV //alert(html); return html; } //设置DIV的位置 function setDiv() { var txt = document.getElementById("wd"); var tDiv = document.getElementById("show_wd"); tDiv.style.width =txt.offsetWidth; + "px"; var left = calculateOffset(txt,"offsetLeft"); var top = calculateOffset(txt, "offsetTop") + txt.offsetHeight; tDiv.style.border = "black 1px solid"; tDiv.style.left = left + "px"; tDiv.style.top = top + "px"; } //将该行的数据填充到文本框内 function completeField(tdvalue) { document.getElementById("wd").value=tdvalue.innerText; document.getElementById("show_wd").style.display="none"; } //计算控件相对于浏览器的位置 function calculateOffset(field, attr) { var offset = 0; while(field) { offset += field[attr]; field = field.offsetParent; } return offset; } //在输入框内点击上下回车 function KeyDown(evt) { evt = (evt) ? evt : ((window.event) ? window.event : "") //兼容IE和Firefox获得keyBoardEvent对象 var key = evt.keyCode?evt.keyCode:evt.which; //兼容IE和Firefox获得keyBoardEvent对象的键值 if(key==38) { //上 lightMove("up"); } if(key==40) { //下 lightMove("down"); } if(key==13) { //回车 lightMove("ok"); } } //高亮移动 function lightMove(cmd) { var tb = document.getElementById("tb"); if(cmd=="up") { //上 for(var i=0;i<tb.rows.length;i++) { if(tb.rows[i].className=="hlight") { tb.rows[i].className="normal"; i=i==0?tb.rows.length-1:i-1; tb.rows[i].className="hlight"; sTxt(tb.childNodes[i].childNodes[0]); } } } if(cmd=="down") { for(var i=0;i<tb.rows.length;i++) { if(tb.rows[i].className=="hlight") { tb.rows[i].className="normal"; i=i==tb.rows.length-1?0:i+1; tb.rows[i].className="hlight"; sTxt(tb.childNodes[i].childNodes[0]); } } } if(cmd=="ok") { for(var i=0;i<tb.rows.length;i++) { if(tb.rows[i].className=="hlight") { completeField(tb.rows[i]); } } } } //将输入的内容写进Table function insTR(tb) { var new_tr = tb.insertRow(tb.rows.length); var new_td = new_tr.insertCell(); new_td.innerText=document.getElementById("wd").value; new_tr.style.display="none"; new_tr.className="hlight"; } //将数值写入文本框 function sTxt(td) { //alert(td.innerText); document.getElementById("wd").value=td.innerText; } //高亮某行 function hLight(tr) { var tb = document.getElementById("tb"); for(var i=0;i<tb.rows.length;i++) { if(tb.rows[i].className=="hlight") { tb.rows[i].className="normal"; break; } } tr.className="hlight"; } window.onload = function() { setDiv(); } </script></head><body> <form id="form1" runat="server"> <div> <input id="wd" type="text" style="width: 500px" autocomplete="off" onkeypress="doit(event)" onkeydown="KeyDown(event)" /> <div id="show_wd" style="position: absolute; font-size: 12px; display:none"> </div> </div> </form></body></html>
[解决办法]
网上看到过一个类似百度的输入就立刻自动提示的例子,很好用!有源码下载,因为有ASP文件,所以必须在IIS环境下才能执行!
地址:http://bbs.bccn.net/thread-309800-1-1.html
[解决办法]
}
}
objouter.style.display='';
}else{
objouter.style.display='none';
}
function addOption(value,keyw){
var v=value.replace(keyw,"<b><font color=red>"+keyw+"</font></b>");
objouter.innerHTML +="<div onmouseover=\"this.className='sman_selectedStyle'\" onmouseout=\"this.className=''\" onmousedown=\"document.getElementById('"+objInputId+"').value='" + value + "'\">" + v + "</div>"
}
}
function chageSelection(isUp){
if (objouter.style.display=='none'){
objouter.style.display='';
}else{
if (isUp)
selectedIndex++ ;
else
selectedIndex-- ;
}
var maxIndex = objouter.children.length-1;
if (selectedIndex<0){selectedIndex=0}
if (selectedIndex>maxIndex){selectedIndex=maxIndex}
for (intTmp=0;intTmp<=maxIndex;intTmp++){
if (intTmp==selectedIndex){
objouter.children[intTmp].className="sman_selectedStyle";
}else{
objouter.children[intTmp].className="";
}
}
}
function outSelection(Index){
if(Index>-1&&(document.getElementById("ss").value!="")){
//浏览器兼容
var text = (objouter.children[Index].innerText!=undefined)?(objouter.children[Index].innerText):(objouter.children[Index].textContent)
objInput.value = text;
objouter.style.display='none';
if(type==1){
document.getElementById("diqu").value = text;
}else if(type==2){
document.getElementById("diqu1").value = text;
}
this.closeDiv(document.getElementById("frame"));
objInput.blur();
}else{
alert("无相关信息!");
}
}
function divPosition(){
objouter.style.top =getAbsoluteHeight(objInput)+getAbsoluteTop(objInput);
objouter.style.left =getAbsoluteLeft(objInput);
objouter.style.width=getAbsoluteWidth(objInput);
}
}
document.write("<div id='__smanDisp' style='position:absolute;display:none;" + this.style + "' onblur> </div>");
document.write("<style>.sman_selectedStyle{background-Color:#BFE6F9;color:#FFFFFF}</style>");
function getAbsoluteHeight(ob){
return ob.offsetHeight;
}
function getAbsoluteWidth(ob){
return ob.offsetWidth;
}
function getAbsoluteLeft(ob){
var s_el=0;
el=ob;
while(el){
s_el=s_el+el.offsetLeft;
el=el.offsetParent;
}
return s_el;
}
function getAbsoluteTop(ob){
var s_el=0;el=ob;
while(el){
s_el=s_el+el.offsetTop;
el=el.offsetParent;
}
return s_el;
}
}
[解决办法]
顶一下 对我有用