模拟一个类似百度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 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
Nov 07 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
JavaScript中伪协议 javascript:使用探讨
Jul 18 Javascript
使用js dom和jquery分别实现简单增删改
Sep 11 Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
纯js实现隔行变色效果
Nov 29 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
Dec 09 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
Feb 07 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
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正则校验用户名介绍
2008/07/19 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
Redis构建分布式锁
2017/03/28 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python random模块用法解析及简单示例
2017/12/18 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
python实现交并比IOU教程
2020/04/16 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
计算机专业应届生求职信
2014/04/06 职场文书
运动会演讲稿200字
2014/08/25 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
原告离婚代理词
2015/05/23 职场文书
开学典礼观后感
2015/06/15 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Java Spring读取和存储详细操作
2022/08/05 Java/Android