如何实现搜索框出现下拉提示?

第一种:
效果如下:
[img]http://dl2.iteye.com/upload/attachment/0112/6071/78a1c972-faed-3c68-bff2-2625b6508dfd.png[/img]

<head>
<title></title>
<style type="text/css">
#autoCompleteWp
{
border: 1px solid #ddd;
padding: 20px;
margin: 100px auto;
width: 300px;
position: relative;
}
#datalist
{
position: absolute;
left: 0;
top: 56px;
background: #f8f8f8;
z-index: 2;
border: 1px solid #FCC;
padding: 15px;
display: none;
}
#datalist li
{
line-height: 1.6;
list-style: none;
cursor: pointer;
}
.on
{
background: #06C;
color: #fff;
}
</style>
</head>
<body>
<div id="autoCompleteWp">
请输入邮箱:<br />
<input id="autoComplete" type="text" />
<ul id="datalist">
</ul>
</div>
<script type="text/javascript">
var $ = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
};
var Class = {
create: function () {
return function () { this.initialize.apply(this, arguments); }
}
}
function addEventHandler(oTarget, sEventType, fnHandler) {
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
} else if (oTarget.attachEvent) {
oTarget.attachEvent("on" + sEventType, fnHandler);
} else {
oTarget["on" + sEventType] = fnHandler;
}
};
function removeEventHandler(oTarget, sEventType, fnHandler) {
if (oTarget.removeEventListener) {
oTarget.removeEventListener(sEventType, fnHandler, false);
} else if (oTarget.detachEvent) {
oTarget.detachEvent("on" + sEventType, fnHandler);
} else {
oTarget["on" + sEventType] = null;
}
}
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
}
//自动完成类
var autoComplete = Class.create();
autoComplete.prototype = {

initialize: function (obj, databox, data) {
_this = this;
this.input = $(obj);
this.data = data;
this.index = 0;
this.datalist = $(databox).getElementsByTagName('li');
addEventHandler(this.input, 'keyup', this.writting);
},
writting: function (e) {
var e = e || window.event;
var keyCode = e.keyCode || e.charCode; //兼容ie firefox等事件

switch (keyCode) {

case 38: //上
_this.index--;
if (_this.index < 0) {
_this.index = $('datalist').getElementsByTagName('li').length - 1
}

if ($('datalist').getElementsByTagName('li').length > 0) {

for (var k = 0; k < $('datalist').getElementsByTagName('li').length; k++) {
$('datalist').getElementsByTagName('li')[k].className = ''
}
}
$('datalist').getElementsByTagName('li')[_this.index].className = "on";
break;
case 40:
_this.index++;
if (_this.index > $('datalist').getElementsByTagName('li').length - 1) {
_this.index = 0;
}
if ($('datalist').getElementsByTagName('li').length > 0) {
for (var k = 0; k < $('datalist').getElementsByTagName('li').length; k++) {
$('datalist').getElementsByTagName('li')[k].className = ''
}
}
$('datalist').getElementsByTagName('li')[_this.index].className = "on"
break;
//回车
case 13:
_this.input.value = $('datalist').getElementsByTagName('li')[_this.index].innerHTML.replace(/<\/?strong>/gi, '') //获取html,正则过滤标签,只取其值
$('datalist').style.display = 'none'
break;
default:
var temp = [];
var val = _this.input.value.trim();
if (val == '') {
$('datalist').style.display = 'none'
return;
}
//如果输入字符包含\会导致正则表达式出错,转换成\\即可 [ ] 等也需要转义
if (val.indexOf('\\') != -1) {
val = val.replace(/\\/g, '\\\\')
}
var reg = new RegExp('^(' + val + ')');
//利用正则把匹配到的数据 加入数组
for (var i = 0; i < _this.data.length; i++) {
//如果匹配到
if (reg.test(_this.data[i])) {
thedata = _this.data[i].replace(reg, '<strong>$1</strong>'); //利用js正则式中replace中的占位符特性
temp.push('<li title="' + i + '">' + thedata + '</li>')
}
else {
$('datalist').style.display = 'none'
}
}
//如果匹配到数据
if (temp.length > 0) {
$('datalist').innerHTML = temp.join('');
$('datalist').style.display = 'block';
var li = $('datalist').getElementsByTagName('li');
li[0].className = "on";
_this.index = 0;
for (var i = 0; i < li.length; i++) {
li[i].onmouseover = function () {
for (var i = 0; i < li.length; i++) {
li[i].className = '';
}
this.className = 'on';
_this.index = this.getAttribute('title');
}
//鼠标点击
li[i].onclick = function () {
_this.input.value = this.innerHTML.replace(/<\/?strong>/gi, '') //获取html,正则过滤标签,只取其值
$('datalist').style.display = 'none'
}
}
}
else {
$('datalist').innerHTML = '';
}
break;
}
}
}
var data = ['yaofjaa@vip.qq.com', 'yaojaa008@163.com', 'yaojaa@yahoo.com', 'yaoj4aa@sohu.com.com', 'yaojaa@vipf.qq.com', 'yfaojaa@163.com', 'yaojfaa@sina.com', 'yaojaa@yahoo.com', 'yaojaa@sohu.com']
var auto = new autoComplete('autoComplete', 'datalist', data)
</script>
</body>
</html>

第二种:
效果如下:

[img]http://dl2.iteye.com/upload/attachment/0112/6075/eb41c084-0a74-3867-915d-9723b51dae37.png[/img]


//显示搜索下拉选择项
function showTips(searchInput) {
var top = searchInput.offsetTop+32;
var left = searchInput.offsetLeft;
var width = searchInput.offsetWidth;
var ulStringFormat = "<li onclick='selectOption(this)' onmouseover='javascript:this.style.backgroundColor=\"#A9A9A9\"' onmouseout='javascript:this.style.backgroundColor=\"#666666\"' style='width:220px;height:25px;background-color: #666666;display:block;'><span style='float:left;text-indent:6px'>" + $("#searchvalue").val() + "</span><span id='{0}' style='float:right;padding-right:1px;fond-size:10px;'>{1}</span></li>";
while (searchInput = searchInput.offsetParent) {
top += searchInput.offsetTop;
left += searchInput.offsetLeft;
}
if ($("#searchvalue").val().length > 0) {
$("#searchTips").css({ "left": left + "px", "top": top + "px" }).show();
$("#searchTips>ul").empty().append(kendo.format(ulStringFormat, "sFlightNo","航班号")).append(kendo.format(ulStringFormat, "sTailNo", "机号"));
}
else {
searchInputBlur();
}
}
function fillvalue(value) {
alert($(value).find("span:first").html());
searchInputBlur();
}
function searchInputBlur() {
$("#searchTips").hide();
}
function selectOption(li) {
$("#hidSearchOption").val(($(li).find("span:last").attr("id")));
searchInputBlur();
}
//搜索
function searchContent() {
var url = "/Manager/DutyManager?BeginTime=" + getTodayBeginUTCTime() + "&EndTime=" + getTodayEndUTCTime()
var option = $("#hidSearchOption").val();
var value = $("#searchvalue").val().trim();
switch (option) {
case "sFlightNo":
url += "&FlightNo=" + value;
break;
case "sTailNo":
url += "&TailNo=" + value;
default:
}
openWindow(url);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值