//自动补全框开始是影藏的
//定义全局变量,表示当前高亮节点
var hlindex = -1;
var timoutId;
$(document).ready(function()
{
var wordInput = $("#word")
var wordInputOffset = wordInput.offset();
//alert(wordInputOffset.top+ "," +wordInputOffset.left);
$("#auto").hide().css("border","1px black solid")
.css("position","absolute")
.css("top",wordInputOffset.top + wordInput.height() + 6 + "px")
.css("left",wordInputOffset.left + "px")
.width(wordInput.width()+2);
wordInput.keyup(function(event)
{
//处理文本框的键盘事件
var myEvent = event || window.event;
var keyCode = myEvent.keyCode;
//如果输入的字母,backspace,delete,应该将文本框最新的数据发给服务器
if(keyCode >=65 && keyCode <=90 || keyCode==8 || keyCode==46)
{
//1.首先获取文本框的内容
var wordText = $("#word").val();
var autoNode = $("#auto");
if(wordText != "")
{
//对上次未完成的延时操作进行取消
clearTimeout(timoutId);
//延迟交互
timoutId = setTimeout(function()
{
//2.将文本框的内容发送给服务器
$.post("AutoComplete",{word:wordText},function(data)
{
//将dom对象data转换成JQuery的对象
var jqueryObj = $(data);
//找到所有的word节点
var wordNodes = jqueryObj.find("word");
//遍历所有的word节点,取出单词内容,然后将单词内容添加在弹出框里
//需要清空原来的内容
autoNode.html("");
wordNodes.each(function(i)
{
//获取单词内容
var wordNode = $(this);
//将单词内容加入到新建的节点中
//将新建的节点加入到弹出框的节点中
var newDivNode = $("<div>").attr("id",i);
newDivNode.html(wordNode.text()).appendTo(autoNode);
//增加鼠标进入事件,高亮节点
newDivNode.mouseover(function()
{
if(hlindex != -1)
{
$("#auto").children("div").eq(hlindex)
.css("background-color","white");
}
hlindex = $(this).attr("id");
$(this).css("background-color","red");
});
newDivNode.mouseout(function()
{
$(this).css("background-color","white");
});
newDivNode.click(function()
{
//取出高亮节点的文本内容
var comText = $(this).text();
hlindex = -1;
$("#word").val(comText);
autoNode.hide();
});
});
if(wordNodes.length>0)
{
autoNode.show();
}
else
{
autoNode.hide();
hlindex = -1;
}
},"xml");
},500);
}
else
{
autoNode.hide();
hlindex = -1;
}
}
else if(keyCode == 38 || keyCode == 40)
{
//如果输入的是向上或向下的键
if(keyCode == 38)
{
var autoNodes = $("#auto").children("div");
if(hlindex != -1)
{
//如果原来存在高亮节点,则将背景色改为白色
autoNodes.eq(hlindex).css("background-color","white");
hlindex--;
}
else
{
//如果修改索引值以后index变成-1,则将索引值指向最后一个元素
hlindex = autoNodes.length -1;
}
autoNodes.eq(hlindex).css("background-color","red");
}
if(keyCode == 40)
{
var autoNodes = $("#auto").children("div");
if(hlindex != -1)
{
//如果原来存在高亮节点,则将背景色改为白色
autoNodes.eq(hlindex).css("background-color","white");
}
hlindex++;
if(hlindex == autoNodes.length)
{
//如果修改索引值以后index变成autoNodes.length,则将索引值改为0
hlindex = 0;
}
autoNodes.eq(hlindex).css("background-color","red");
}
}
else if(keyCode == 13)
{
//回车的操作
if(hlindex != -1)
{
//取出高亮节点的文本内容
var comText = $("#auto").hide().children("div").eq(hlindex).text();
hlindex = -1;
$("#word").val(comText);
}
else
{
//下拉框没有高亮内容
alert("文本框中的[" +$("#word").val() + "]被提交了!!");
$("#auto").hide();
//让文本框失去焦点
$("#word").get(0).blur();
}
}
});
$("input[type='button']").click(function()
{
alert("文本框中的[" +$("#word").val() + "]被提交了!!");
});
});
|