inputSuggest文本框输入时提示、自动完成效果(邮箱输入自动补全插件)

像QQ邮箱提示、百度的搜索框提示、淘宝的商品搜索提示等,现在有不少的网站都有类似效果,以提升用户体验。
  使用方法:
  new InputSuggest({
  input HTMLInputElement 必选
  data Array ['sina.cn','sina.com','2008.sina.com','vip.sina.com.cn'] 必选
  containerCls 容器className
  itemCls 容器子项className
  activeCls 高亮子项className
  width 宽度设置 此项将覆盖containerCls的width
  opacity 透明度设置 此项将覆盖containerCls的opacity……
在线演示:http://demo.jb51.net/js/2012/inputSuggest/
完整源码下载:http://www.jb51.net/jiaoben/44737.html

inputSuggest输入字符时提示

body{margin:0;padding:0;}
input{width:200px;}
.suggest-container{border:1px solid #C1C1C1;visibility:hidden;}
.suggest-item{padding:3px 2px;}
.suggest-active {background:#33CCFF;color:white;padding:3px 2px;}

function InputSuggest(opt){
this.win = null;
this.doc = null;
this.container = null;
this.items = null;
this.input = opt.input || null;
this.containerCls = opt.containerCls || 'suggest-container';
this.itemCls = opt.itemCls || 'suggest-item';
this.activeCls = opt.activeCls || 'suggest-active';
this.width = opt.width;
this.opacity = opt.opacity;
this.data = opt.data || [];
this.active = null;
this.visible = false;
this.init();
}
InputSuggest.prototype = {
init: function(){
this.win = window;
this.doc = window.document;
this.container = this.$C('div');
this.attr(this.container, 'class', this.containerCls);
this.doc.body.appendChild(this.container);
this.setPos();
var _this = this, input = this.input;
this.on(input,'keyup',function(e){
if(input.value==''){
_this.hide();
}else{
_this.onKeyup(e);
}
});
// blur会在click前发生,这里使用mousedown
this.on(input,'blur',function(e){
_this.hide();
});
this.onMouseover();
this.onMousedown();
},
$C: function(tag){
return this.doc.createElement(tag);
},
getPos: function (el){
var pos=[0,0], a=el;
if(el.getBoundingClientRect){
var box = el.getBoundingClientRect();
pos=[box.left,box.top];
}else{
while(a && a.offsetParent){
pos[0] += a.offsetLeft;
pos[1] += a.offsetTop;
a = a.offsetParent
}
}
return pos;
},
setPos: function(){
var input = this.input,
pos = this.getPos(input),
brow = this.brow,
width = this.width,
opacity = this.opacity,
container = this.container;
container.style.cssText =
'position:absolute;overflow:hidden;left:'
+ pos[0] + 'px;top:'
+ (pos[1]+input.offsetHeight) + 'px;width:'
// IE6/7/8/9/Chrome/Safari input[type=text] border默认为2,Firefox为1,因此取offsetWidth-2保证与FF一致
+ (brow.firefox ? input.clientWidth : input.offsetWidth-2) + 'px;';
if(width){
container.style.width = width + 'px';
}
if(opacity){
if(this.brow.ie){
container.style.filter = 'Alpha(Opacity=' + opacity * 100 + ');';
}else{
container.style.opacity = (opacity == 1 ? '' : '' + opacity);
}
}
},
show: function(){
this.container.style.visibility = 'visible';
this.visible = true;
},
hide: function(){
this.container.style.visibility = 'hidden';
this.visible = false;
},
attr: function(el, name, val){
if(val === undefined){
return el.getAttribute(name);
}else{
el.setAttribute(name,val);
name=='class' && (el.className = val);
}
},
on: function(el, type, fn){
el.addEventListener ? el.addEventListener(type, fn, false) : el.attachEvent('on' + type, fn);
},
un: function(el, type, fn){
el.removeEventListener ? el.removeEventListener(type, fn, false) : el.detachEvent('on' + type, fn);
},
brow: function(ua){
return {
ie: /msie/.test(ua) && !/opera/.test(ua),
opera: /opera/.test(ua),
firefox: /firefox/.test(ua)
};
}(navigator.userAgent.toLowerCase()),
onKeyup: function(e){
var container = this.container, input = this.input, iCls = this.itemCls, aCls = this.activeCls;
if(this.visible){
switch(e.keyCode){
case 13: // Enter
if(this.active){
input.value = this.active.firstChild.data;
this.hide();
}
return;
case 38: // 方向键上
if(this.active==null){
this.active = container.lastChild;
this.attr(this.active, 'class', aCls);
input.value = this.active.firstChild.data;
}else{
if(this.active.previousSibling!=null){
this.attr(this.active, 'class', iCls);
this.active = this.active.previousSibling;
this.attr(this.active, 'class', aCls);
input.value = this.active.firstChild.data;
}else{
this.attr(this.active, 'class', iCls);
this.active = null;
input.focus();
input.value = input.getAttribute("curr_val");
}
}
return;
case 40: // 方向键下
if(this.active==null){
this.active = container.firstChild;
this.attr(this.active, 'class', aCls);
input.value = this.active.firstChild.data;
}else{
if(this.active.nextSibling!=null){
this.attr(this.active, 'class', iCls);
this.active = this.active.nextSibling;
this.attr(this.active, 'class', aCls);
input.value = this.active.firstChild.data;
}else{
this.attr(this.active, 'class', iCls);
this.active = null;
input.focus();
input.value = input.getAttribute("curr_val");
}
}
return;
}
// 烈火網 liehuo.net 欢迎复制,拒绝恶意采集 veryhuo.COm
}
if(e.keyCode==27){ // ESC键
this.hide();
input.value = this.attr(input,'curr_val');
return;
}
if(input.value.indexOf('@')!=-1){return;}
this.items = [];
if(this.attr(input,'curr_val')!=input.value){
this.container.innerHTML = '';
for(var i=0,len=this.data.length;i

window.onload = function(){
var sinaSuggest = new InputSuggest({
input: document.getElementById('sina'),
data: ['sina.cn','sina.com','vip.sina.com.cn','2008.sina.com','263.sina.com']
});
var sohuSuggest = new InputSuggest({
width: 300,
opacity: 0.3,
input: document.getElementById('sohu'),
data: ['sohu.com','sogou.com','chinaren.com','vip.sohu.com','sohu.net','2008.sohu.com','sms.sohu.com']
});
}

新浪

搜狐

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • 有关suggest快速删除后仍然出现下拉列表的bug问题

    写suggest的时候,有时我们快速删除输入框的文字后,但是suggest下拉列表还有出现,导致的原因是因为ajax异步请求造成的. 虽然我们把输入框的内容都删除了,甚至做了停止后续请求的相关操作,但是由于ajax是异步的,即使你停止了后续的操作,但是最后一次请求的数据还在回来的路上. 解决办法看代码: var inp = document.getElementById('inp'), timer = 0; inp.oninput = function (e) { var val = e.tar

  • AJAX实现仿Google Suggest效果

    修复了一些细节代码(支持持续按键事件) *项目名称:AJAX实现类Google Suggest效果*作者:草履虫(也就是蓝色的ecma)*联系:caolvchong@gmail.com*时间:2007-7-7*工具: DreamWeaver(写ASP),Aptana(写Javascript,HTML和CSS),Emeditor(写这篇文章),Access2003(数据库)*测试平台:Firefox2.0,IE6.0,IE7.0*演示地址:http://finish.3322.org/sugges

  • suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)

    重要的键盘事件: 事件顺序:keydown -> keypress ->keyup 对于输入法开启时: keypress: 这三个事件中最最特别的事件的说,如果巧妙运用可以事半功倍: 1. 首先对于大部分功能键是没有keypress事件的 Caps lock ,shift,alt,ctrl,num lock...庆幸的是enter拥有此事件 2. 对于字母,数字,press返回的keyCode是不可靠的 在IE和webkit 下 返回的是ASCII code firfox下永远返回0 但是 对

  • javascript suggest效果 自动完成实现代码分享

    首先,用到的框架当然是我的框架mass Framework,当然你用其他框架也可以,如jQuery,没有什么复杂的东西.只要弄懂原理,一下子就能搞出来.想必,以后你们工作也遇到做搜索框的活儿. 由于本人没有后端,因此取用一个对象作为本地数据库.而我现在要做的,其实远远比suggest高级,类似IDE的语法提示的东西.当前成品已放到github上. 好了,我们动手吧.首先是结构层,装了FF的同学可以在百度首页查看源码,当输入几个字母时,会动态生成了那些HTML.不过怎么也好,其成就是一个DIV放到

  • ajax Suggest类似google的搜索提示效果

    实现: <script type="text/javascript" src="/path/to/SuggestFramework.js"></script> <script type="text/javascript">window.onload = initializeSuggestFramework;</script> 有了上面两句后,每个取了名的文本框会多出五个属性: 1.action 必须

  • 仿google搜索提示 SuggestFramework的使用

    一.首先来看一下什么是suggest framework Suggest Framework 故名思意,就是仿 Google Suggest 的一个小框架,让你的文本框也有提示功能.利用suggest framework你可以在自己的网站上很轻松实现"输入提示"效果,这种效果会很大程度上提高用户体验,提高搜索效率. 一个页面上可以出现多个搜索框,每个搜索框都可以实现单独配置. 此框架无浏览器限制,基本兼容当前的绝大多数浏览器,包括Internet Explorer 5+ (Win/Ma

  • JSuggest自动匹配下拉框使用方法(示例代码)

    1.下载jquery-latest.js,JSuggest.js和JSuggest.css JSuggest.js源代码如下 复制代码 代码如下: /*** * Description : JSuggest 下拉提示框*/ function JSuggest(){ // DIV下拉框this.div = null; // DIV下的ulthis.ul = null; // 文本输入框this.input = null; // 当前DIV所选的LI对象this.current_li = null;

  • Google Suggest ;-) 基于js的动态下拉菜单

    基本的原理是在当前窗口创建了一个iframe,然后将相关关键词的提示列表在iframe中,并通过列表点选将选定项放到搜索框中.能这么快的能将所有相关关键词的检索数列出,看来所有的提示词已经提前进行了预搜索和数量记录.试了一下"sex",没有相关检索提示,看来对搜索词进行了严格的色情过滤. 另外:这一动态列表功能也应用在GMail的地址栏自动输入完成中,如图: Google自动完成的源代码如下:// Copyright 2004 and onwards Google Inc. var w

  • inputSuggest文本框输入时提示、自动完成效果(邮箱输入自动补全插件)

    像QQ邮箱提示.百度的搜索框提示.淘宝的商品搜索提示等,现在有不少的网站都有类似效果,以提升用户体验. 使用方法: new InputSuggest({ input HTMLInputElement 必选 data Array ['sina.cn','sina.com','2008.sina.com','vip.sina.com.cn'] 必选 containerCls 容器className itemCls 容器子项className activeCls 高亮子项className width

  • JavaScript 文本框下拉提示(自动提示)

    文本框下拉提示效果 html{overflow:-moz-scrollbars-vertical;} body{padding:0;margin:0;font:12px/1.5 Tahoma,Helvetica,Arial,sans-serif;} body,h1,p,blockquote,dl,dt,dd,ul,ol,li,input{margin:0;padding:0;} button,input,select,textarea {font:12px/1.5 tahoma,arial,si

  • jquery实现表单输入时提示文字滑动向上效果

    本文实例讲述了jquery实现表单输入时提示文字滑动向上效果.分享给大家供大家参考.具体如下: 这里基于jQuery实现的表单输入框提示效果,当不输入的时候,提示文字就显示在输入框中,当鼠标点击文本框要输入文字的时候,提示文字向滑出输入框,好像很个性也很智能的样子,用户体验比较不错,运用了CSS3的部分属性,因此在测试时,请尽量要用高版本的IE9或chrome和火狐等网页浏览器. 运行效果截图如下: 具体代码如下: <!doctype html> <html> <head&g

  • .Net 文本框实现内容提示的实例代码(仿Google、Baidu)

    1.Demo下载: 文本框实现内容提示(仿Google.Baidu).rar 2.创建数据库.表(我用的sqlserver2008数据库) 复制代码 代码如下: CREATE TABLE Ceshi(   id VARCHAR(50) PRIMARY KEY NOT NULL,   cname VARCHAR(30) )GO INSERT INTO CeshiSELECT NEWID(),'jack1' UNIONSELECT NEWID(),'jack2' UNIONSELECT NEWID(

  • jquery+ajax+text文本框实现智能提示完整实例

    本文实例讲述了jquery+ajax+text文本框实现智能提示的方法.分享给大家供大家参考,具体如下: 模仿百度查询的智能提示 先看看效果图: 代码部分: CSS代码: <style type="text/css"> #searchresult { width: 130px; position: absolute; z-index: 1; overflow: hidden; left: 130px; top: 71px; background: #E0E0E0; bord

  • jQuery简单实现input文本框内灰色提示文本效果的方法

    本文实例讲述了jQuery简单实现input文本框内灰色提示文本效果的方法.分享给大家供大家参考,具体如下: $(function(){ $(".grayTips").each(function(){ //遍历每个文本框 var objTextBox=$(this); var oldText=$.trim(objTextBox.val()); objTextBox.css("color","#888"); objTextBox.focus(fun

  • jQuery实现表格文本框淡入更改值后淡出效果

    本文分为html代码和jquery两段代码,代码很简单,大家可以参考下! html代码 <table style="border:1px solid blue"> <tr> <th>id</th> <th>name</th> <th>age</th> <th>sex</th> <th>操作</th> </tr> <tr>

  • vim自动补全插件YouCompleteMe(YCM)安装过程解析

    Vim是全平台上一个高度可拓展的编辑器.它本身只是一个简陋的编辑器,但是因为有各种插件而变得强大.使用Vim编写代码就不免遇到代码补全的问题.常用的代码补全插件有两个:日本人shougo写的neocomplete和前Google工程师Valloric写的YouCompleteMe.用的人比较多的还是YouCompleteMe.YouCompleteMe被称为Vim最难配置的插件,当初配置好YouCompleteMe也是费了九牛二虎之力,印象中是花了整整一个晚上.回报也是显然的,支持定义跳转,变量

  • Visual Studio Code上添加小程序自动补全插件的操作方法

    Visual Studio Code(简称"VS Code" )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器, 可在桌面上运行,并且可用于Windows,macOS和Linux.它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例

  • BootStrap Typeahead自动补全插件实例代码

    关键代码如下所示: $('#Sale').typeahead({ ajax: { url: '@Url.Action("../Contract/GetSale")', //timeout: 300, method: 'post', triggerLength: 1, loadingClass: null, preProcess: function (result) { return result; } }, display: "Value", val: "

随机推荐