模拟一个类似百度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 学习笔记(十五)
Jan 28 Javascript
基于jquery的跟随屏幕滚动代码
Jul 24 Javascript
onclick与listeners的执行先后问题详细解剖
Jan 07 Javascript
jQuery调取jSon数据并展示的方法
Jan 29 Javascript
原生js仿jquery一些常用方法(必看篇)
Sep 20 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
Oct 24 Javascript
JS实战篇之收缩菜单表单布局
Dec 10 Javascript
Javascript实现基本运算器
Jul 15 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
Sep 28 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
Dec 03 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 Javascript
JavaScript常见事件处理程序实例总结
Jan 05 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
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python根据多个文件名批量查找文件
2019/08/13 Python
使用python实现对元素的长截图功能
2019/11/14 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
远东集团网络工程师面试题
2014/10/20 面试题
高校自主招生校长推荐信
2015/03/23 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
关于幸福的感言
2015/08/03 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
python编写五子棋游戏
2021/05/25 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server
处理canvas绘制图片模糊问题
2022/05/11 Javascript