模拟一个类似百度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与vbscript数据共享
Jan 09 Javascript
js加解密 脚本解密
Feb 22 Javascript
JavaScript CSS修改学习第三章 修改样式表
Feb 19 Javascript
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
javascript实现单击和双击并存的方法
Dec 13 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
Canvas 制作动态进度加载水球详解及实例代码
Dec 09 Javascript
详解vue事件对象、冒泡、阻止默认行为
Mar 20 Javascript
浅谈webpack SplitChunksPlugin实用指南
Sep 17 Javascript
vue.js的状态管理vuex中store的使用详解
Nov 08 Javascript
微信小程序利用for循环解决内容变更问题
Mar 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
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
javascript常用功能汇总
2015/07/05 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
python魔法方法-属性访问控制详解
2016/07/25 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python实现的双色球生成功能示例
2017/12/18 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
python函数与方法的区别总结
2019/06/23 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Python进程池Pool应用实例分析
2019/11/27 Python
python如何把字符串类型list转换成list
2020/02/18 Python
Python super()函数使用及多重继承
2020/05/06 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
代理协议书范本
2014/04/22 职场文书
学位证书委托书
2014/09/30 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
vue里使用create, mounted调用方法
2022/04/26 Vue.js
MySQL数据库查询之多表查询总结
2022/08/05 MySQL