模拟一个类似百度google的模糊搜索下拉列表


Posted in Javascript onApril 15, 2014
// JavaScript Document 
function onChangehoverLi(thisLi){ 
$("#searchtext").val($(thisLi).html()); 
$("#suggest_ul").hide(0); 
validateform2(); 
} $(function(){ 
//载入时隐藏下拉li 
$("#suggest_ul").hide(0); 
}); 
//Ajax 动态获取关键字 
//监听文本框输入变化 
function fuzzySearch(){ 
//创建ajax对象函数 
function createLink(){ 
if(window.ActiveXObject){ 
var newRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
}else{ 
var newRequest = new XMLHttpRequest(); 
} 
return newRequest; 
} 
//如果文本框为空,不发送请求 
if($("#searchtext").val().length==0||$("#searchtext").val().length>10){ 
$("#suggest_ul").hide(0); 
return; 
} 
//发送请求 
http_request = createLink();//创建一个ajax对象 
if(http_request){ 
var sid = $("#searchtext").val(); 
var url = "contentSearchAction!getSynonyms.action"; 
var data = "keywords="+encodeURI(sid); 
//alert(data) 
http_request.open("post",url,true); 
http_request.setRequestHeader("content-type","application/x-www-form-urlencoded"); 
//指定一个函数来处理从服务器返回的结果 
http_request.onreadystatechange = dealresult; //此函数不要括号 
//发送请求 
http_request.send(data); 
} 
//处理返回结果 
function dealresult(){ 
if(http_request.readyState==4){ 
//等于200表示成功 
if(http_request.status==200){ 
if(http_request.responseText=="no"){ 
$("#suggest_ul").hide(0); 
return; 
} 
$("#suggest_ul").show(0); 
var res = eval("("+http_request.responseText+")"); 
var contents=""; 
for(var i=0;i<res.length;i++){ 
var keywords = res[i].keywords; 
contents=contents+"<li onclick='onChangehoverLi(this);' class='suggest_li"+(i+1)+"'>"+keywords+"</li>"; 
} 
$("#suggest_ul").html(contents); 

} 
} 
} 
} 
//鼠标 
$(function(){ 
//按下按键后300毫秒显示下拉提示 
$("#searchtext").keyup(function(){ 
setInterval(changehover,300); 
function changehover(){ 
$("#suggest_ul li").hover(function(){ $(this).css("background","#eee");},function(){ $(this).css("background","#fff");}); 
} 
}); 
});

页面:
<!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> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>searchSuggest</title> 
<link href="css/searchSuggest.css" type="text/css" rel="stylesheet" > 
<script type="text/javascript" src="js/jquery-1.7.1.js"></script> 
<script type="text/javascript" src="js/searchSuggest.js"></script> 
<style> 
#suggest_ul{ 
width:100%; 
max-height:223px; 
margin:0px; 
padding:0px; 
border:1px solid #ccc; 
background-color:#ffffff; 
list-style-type:none; 
} 
#suggest_ul li{ 
padding-left:5px; 
line-height:22px; 
font-size:13px; 
width:100%; 
height:22px; 
cursor:default; 
} 
</style> 
</head> 
<body> 
<div id="searchSuggest"> 
<form action="deal.php" method="get" id="suggest_form"> 
<input type="text" id="searchtext" name="searchtext" autocomplete="off" value="search..." oninput="fuzzySearch();" onblur="if(this.value==''){this.value='search...'}" onfocus="if(this.value=='search...'){this.value=''}"/> 
<input type="submit" value="搜索一下" id="suggest_submit" /> 
</form> 
<ul id="suggest_ul"> 
</ul> 
</div> 
</body> 
</html>

使用的过程中发现一种情况不会去搜索,ios系统自带的输入法输入中文的时候既不是onkeyup 也不是onchange事件,因为是用户刚开始的按钮是按的虚拟键盘,

可以使用onkeyup 事件,当出现中文的时候点击中文将 输入框里面的值改变成了中文,onchange不能捕获脚本改动的输入框的值。

最后的解决办法是 用oninput事件,这个是最新的html5 中的事件非常好用,只是有些低版本的浏览器不能兼容比较麻烦。

Javascript 相关文章推荐
JavaScript的parseInt 取整使用
May 09 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
Jquery中ajax方法data参数的用法小结
Feb 12 Javascript
js实现模拟银行卡账号输入显示效果
Nov 18 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
详解vue移动端日期选择组件
Feb 22 Javascript
详解JavaScript作用域和作用域链
Mar 19 Javascript
解决layui checkbox 提交多个值的问题
Sep 02 Javascript
angular异步验证防抖踩坑实录
Dec 01 Javascript
浅谈Vue的computed计算属性
Mar 21 Vue.js
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 #Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 #Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 #Javascript
jquery datepicker参数介绍和示例
Apr 15 #Javascript
javascript调试之DOM断点调试法使用技巧分享
Apr 15 #Javascript
javascript页面渲染速度测试脚本分享
Apr 15 #Javascript
JS实现静止元素自动移动示例
Apr 14 #Javascript
You might like
php分页代码学习示例分享
2014/02/20 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
VueJS全面解析
2016/11/10 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
Javascript的this用法
2017/01/16 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
JavaScript回调函数callback用法解析
2020/01/14 Javascript
react基本安装与测试示例
2020/04/27 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
python使用socket向客户端发送数据的方法
2015/04/29 Python
python中argparse模块用法实例详解
2015/06/03 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python函数装饰器实现方法详解
2018/12/22 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
python中的协程深入理解
2019/06/10 Python
python Tensor和Array对比分析
2020/01/08 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
求职自荐信范文格式
2013/11/29 职场文书
大学校庆邀请函
2014/01/11 职场文书
建筑施工安全责任书
2014/07/24 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Python序列化模块JSON与Pickle
2022/06/05 Python