模拟一个类似百度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 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
js checkbox(复选框) 使用集锦
Apr 28 Javascript
asp.net下利用js实现返回上一页的实现方法小集
Nov 24 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
Feb 05 Javascript
js获得鼠标的坐标值的方法
Mar 13 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
Jan 02 Javascript
非常优秀的JS图片轮播插件Swiper的用法
Jan 03 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
Angular之toDoList的实现代码示例
Dec 02 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
Nov 15 Javascript
Vue中的nextTick作用和几个简单的使用场景
Jan 25 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/08/16 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
js数据类型检测总结
2018/08/05 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
python 基础教程之Map使用方法
2017/01/17 Python
Django csrf 验证问题的实现
2018/10/09 Python
python读取几个G的csv文件方法
2019/01/07 Python
Python字符串的一些操作方法总结
2019/06/10 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
怎样声明接口
2014/09/19 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
网上书店创业计划书
2014/01/12 职场文书
三八妇女节活动总结
2014/05/04 职场文书
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript