模拟一个类似百度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 相关文章推荐
如何实现iframe(嵌入式帧)的自适应高度
Jul 26 Javascript
javascript 无提示关闭窗口脚本
Aug 17 Javascript
理解Javascript_05_原型继承原理
Oct 13 Javascript
杨氏矩阵查找的JS代码
Mar 21 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
Feb 15 Javascript
Vue.directive自定义指令的使用详解
Mar 10 Javascript
D3.js进阶系列之CSV表格文件的读取详解
Jun 06 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
Apr 24 Javascript
通过js示例讲解时间复杂度与空间复杂度
Aug 06 Javascript
vue实现整屏滚动切换
Jun 29 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
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
php微信开发之关注事件
2018/06/14 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
React组件refs的使用详解
2018/02/09 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
python调用java的Webservice示例
2014/03/10 Python
python实现图片批量剪切示例
2014/03/25 Python
python操作redis的方法
2015/07/07 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
python3 拼接字符串的7种方法
2018/09/12 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
django 读取图片到页面实例
2020/03/27 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
招商经理岗位职责
2013/11/16 职场文书
大学自主招生自荐信
2013/12/16 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis