文本框自动补齐

 一般下拉框不能实现 ,搜索文本框实现查询,对于绑定的数据多的话,查看起来就有点费劲。怎么能够实现类似于Google的所有引擎呢?往下看

<style type="text/css">
.search
{
left: 0;
position: relative;
}
.sb_input
{
background: url(Jquery/images/down.png) no-repeat center;
cursor: pointer;
}
.autoDiv
{
display: none;
position: absolute;
width: 150px;
height: 150px;
border: 1px solid #00f;
background-color: White;
overflow: auto;
}
</style>
<script src="../Jquery/jquery-1.8.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
//测试用的数据
//var list = '<%= BindDDL()%>';
//test_list = list.split('|');
var test_list = ["小张", "小苏", "小杨", "老张", "老苏", "老杨", "hello", "HI", "heel"];
var old_value = "";
var newIndex = 1; //高亮
var oldIndex = 1; //用于取消高亮显示
var counts = 0; // test_list.length; //列表个数


//按上下键设置样式
function setStyleForChange() {
newIndex = newIndex > counts ? 1 : newIndex;
newIndex = newIndex < 1 ? counts : newIndex;
$("div #" + newIndex).css("background-color", "#ebebeb");
$("div #" + oldIndex).css("background-color", "white");
}
//给文本框设置值
function setValue(newIndex, emailInput) {
var addr = $("div #" + newIndex).text(); //.replace(/^/s/s*/, '').replace(//s/s*$/, '');
emailInput.val("");
emailInput.val(addr);
}
//鼠标移入设置样式
function setStyle(obj) {

oldIndex = newIndex;
newIndex = $(obj).attr("id");
$(obj).css("background-color", "#ebebeb");
$("div #" + oldIndex).css("background-color", "white");
setValue(newIndex, $("#search_text"));
}
//鼠标移出取消样式
function cancelStyle(obj) {
$(obj).css("background-color", "white");
}
//自动显示
function autoShow() {
var obj = document.getElementById("search_text");
var mailAddressList = document.getElementById("auto_div");
var x = 0, y = 0, o = obj; h = obj.offsetHeight;
while (o != null) {
x += o.offsetLeft;
y += o.offsetTop;
o = o.offsetParent;
}
mailAddressList.style.left = x + 'px';
mailAddressList.style.top = y + h + 'px';
mailAddressList.style.display = "inline";
}
//自动隐藏
function autoHide() {
var mailAddressList = document.getElementById("auto_div");
mailAddressList.style.display = "none";
}
//自动完成
function AutoComplete(auto, search, mylist, select) {
if ($("#" + search).val() != old_value || old_value == "") {
var autoNode = $("#" + auto); //div
var Input = $("#" + search); //文本框
autoNode.addClass("autoDiv");
//过滤临时数组
var carlist = new Array();
var n = 0;

old_value = Input.val();

for (i in mylist) {
//判断是不是文本框有数据后点击按钮
if (select == "button") {
carlist[n++] = mylist[i];
}
else {
if (mylist[i].toUpperCase().indexOf(old_value.toUpperCase()) >= 0) {
carlist[n++] = mylist[i];
}
}
}
if (carlist.length == 0) {
autoHide();
return;
}
autoNode.empty(); //清空上次的记录

counts = carlist.length;
for (var i = 0; i < carlist.length; i++) {

var wordNode = carlist[i].split(',')[0]; //弹出框里的每一条内容
var idNode = carlist[i].split(',')[1];
//var newDivNode = $("<div>").attr("id", i + 1); 设置每个节点的id值

var newDivNode = $("<div>").attr("id", idNode);
newDivNode.attr("onmouseover", "setStyle(this)");
newDivNode.attr("onmouseout", "cancelStyle(this)");
newDivNode.attr("style", "font:14px/25px arial;height:25px;padding:0 8px;");
newDivNode.html(wordNode).appendTo(autoNode); //追加到弹出框


//鼠标点击文字上屏
newDivNode.click(function () {
setValue(newIndex, Input);
newIndex = 1;
autoHide();
//取出高亮节点的文本内容
//var comText = autoNode.hide().children("div").eq(newIndex - 1).text();
//文本框中的内容变成高亮节点的内容
//$("#" + search).val(comText);
})

//如果返回值有内容就显示出来
if (carlist.length > 0) {
autoShow();
} else { //服务器端无内容返回 那么隐藏弹出框
autoHide();
//弹出框隐藏的同时,高亮节点索引值也变成-1
newIndex = 1;
}
}

}

//点击页面隐藏自动补全提示框
document.onclick = function (e) {
var e = e ? e : window.event;
var tar = e.srcElement || e.target;
if (tar.id != search) {
if ($("#" + auto).is(":visible")) {
if (select == "text") {
$("#" + auto).css("display", "none")
}
else {
$("#" + auto).css("display", "inline")
}
}
}
}
}
document.onkeydown = function (event) {
var e = event || window.event || arguments.callee.caller.arguments[0];
var emailInput = $("#search_text");
var autoNode = $("#auto_div");
switch (e.keyCode) {
case 40:
autoNode.focus();
oldIndex = newIndex;
newIndex++;
setStyleForChange();
setValue(newIndex, emailInput);
break;
case 38:
autoNode.focus();
oldIndex = newIndex;
newIndex--;
setStyleForChange();
setValue(newIndex, emailInput);
break;
case 13:
autoNode.focus();
setValue(newIndex, emailInput);
autoHide();
GetName = newIndex;
break;
}
};
$(function () {
//触发文本框
$("#search_text").keyup(function () {
$("#search_text").focus();
AutoComplete("auto_div", "search_text", test_list, "text");
});
//触发按钮
$(".sb_input").bind('click', function () {
old_value == "";
AutoComplete("auto_div", "search_text", test_list, "button");
});
});
</script>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="top" style="border-top: 1px solid #54A5D5; border-left: solid 1px #54A5D5;
border-bottom: solid 1px #54A5D5; border-right: solid 1px #54A5D5;">
<table border="0" cellpadding="0" cellspacing="0" style="font-size: 12px; width: 560px;
background-color: #EBF6FE;">
<tr style="height: 25px;">
<td style="width: 250px; text-align: left; vertical-align: middle;">
<input type="text" id="search_text" /><input class="sb_input" type="button" />
<div id="auto_div">
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>

ok,写的都是静态数据,如果想用自己数据,那就要后台绑定,自己去掉了

 

posted @ 2014-06-10 10:39  闫小彪  阅读(408)  评论(0编辑  收藏  举报