php 智能输入提示插件,Linux_javascript自动补全插件,输入提示,自动完成autoComplete   检测当 - phpStudy...

javascript自动补全插件,输入提示

自动完成autoComplete

检测当键盘up键被按下的时候,遍历结果数据,判断是否被选中,如果没有被选中,则选中最后一个,如果有被选中的元素,则选择上一个元素并赋值给input,如果选中的元素是第一个孩子节点则跳到最后一个选中,如果弹出层没有显示则执行插入操作,并显示弹出层,down键被按下,原理同up键,如果按下的键既不是up又不是down那么直接去匹配数据并插入,这个延迟处理是因为如果失去焦点的时候是点击选中数据的时候会发现先无法触发点击事件。对弹出层li元素绑定采用onmouseover,在li元素还没有加载的时候就绑定这个方法,通过判断target是否是li元素进行处理,也没有写addClass方法,直接赋值了

自动补全

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, simsun, sans-serif;}

h1, h2, h3, h4, h5, h6 { font-size: 100%;font-weight:normal; }

ul, ol { list-style: none; }

button, input, select, textarea { font-size: 100%; }

html { overflow:-moz-scrollbars-vertical; }

a { text-decoration: none;}

a:hover { text-decoration: underline;}

#wrap{width:650px;margin:0 auto;}

.txt{width:210px;height:25px;border:1px solid #ccc;line-height:25px;padding:0 5px;}

.autoDis{border:1px solid #999;position:absolute;overflow:hidden;}

.autoDis p{line-height:25px;cursor:default;padding:0 5px;}

.autoDis li{line-height:25px;cursor:default;padding:0 5px;background-color:#fff;}

.autoDis .cur{background:#ccc;}

自动补全

提示:可以输入“1”开头的

abcdefg

(autoComplete={

pop_len:10,

pop_cn:'autoDis',

hover_cn:'cur',

source:'13612345564|13825646464|13412236054|13012348564|13012345564|13012365564|彭小|王达|李相公|周欢欢'.split('|'),

init:function(){

this.setDom();

return this;

},

bind:function(x){

if(x.getAttribute('type') != 'text' || x.nodeName != 'INPUT')

return null;

var self = this;

x.onkeyup = function(e){

e = e || window.event;

var lis = self.pop.getElementsByTagName('li'),lens = self.pop.getElementsByTagName('li').length,n=lens,temp;

if(e.keyCode == 38){                                        //键盘up键被按下

if(self.pop.style.display != 'none'){

for(var i=0;i

if(lis[i].className)

temp = i;

else

n--;

}

if(n==0){                                                //如果没有被选中的li元素,则选中最后一个

lis[lens-1].className = self.hover_cn;

this.value = lis[lens-1].innerHTML;

}else{                                                    //如果有被选中的元素,则选择上一个元素并赋值给input

if(lis[temp] == lis[0]){                        //如果选中的元素是第一个孩子节点则跳到最后一个选中

lis[lens-1].className = self.hover_cn;

this.value = lis[lens-1].innerHTML;

lis[temp].className = '';

}else{

lis[temp-1].className = self.hover_cn;

this.value = lis[temp-1].innerHTML;

lis[temp].className = '';

}

}

}else                                                //如果弹出层没有显示则执行插入操作,并显示弹出层

self.insert(this);

}else if(e.keyCode == 40){                     //down键被按下,原理同up键

if(self.pop.style.display != 'none'){

for(var i=0;i

if(lis[i].className)

temp = i;

else

n--;

}

if(n==0){

lis[0].className = self.hover_cn;

this.value = lis[0].innerHTML;

}else{

if(lis[temp] == lis[lens-1]){

lis[0].className = self.hover_cn;

this.value = lis[0].innerHTML;

lis[temp].className = '';

}else{

lis[temp+1].className = self.hover_cn;

this.value = lis[temp+1].innerHTML;

lis[temp].className = '';

}

}

}else

self.insert(this);

}else                                    //如果按下的键既不是up又不是down那么直接去匹配数据并插入

self.insert(this);

};

x.onblur = function(){                //这个延迟处理是因为如果失去焦点的时候是点击选中数据的时候会发现先无法触发点击事件

setTimeout(function(){self.pop.style.display='none';},300);

};

return this;

},

setDom:function(){

var self = this;

var dom = document.createElement('div'),frame=document.createElement('iframe'),ul=document.createElement('ul');

document.body.appendChild(dom);

with(frame){                                    //用来在ie6下遮住select元素

setAttribute('frameborder','0');

setAttribute('scrolling','no');

style.cssText='z-index:-1;position:absolute;left:0;top:0;'

}

with(dom){                                        //对弹出层li元素绑定onmouseover,onmouseover

className = this.pop_cn;

appendChild(frame);

appendChild(ul);

onmouseover  = function(e){            //在li元素还没有加载的时候就绑定这个方法,通过判断target是否是li元素进行处理

e = e || window.event;

var target = e.srcElement || e.target;

if(target.tagName == 'LI'){            //添加样式前先把所有的li样式去掉,这里用的是一种偷懒的方式,没有单独写removeClass方法

for(var i=0,lis=self.pop.getElementsByTagName('li');i

lis[i].className = '';

target.className=self.hover_cn;        //也没有写addClass方法,直接赋值了

}

};

onmouseout = function(e){

e = e || window.event;

var target = e.srcElement || e.target;

if(target.tagName == 'LI')

target.className='';

};

}

this.pop = dom;

},

insert:function(self){

var bak = [],s,li=[],left=0,top=0,val=self.value;

for(var i=0,leng=this.source.length;i

if(!!val&&val.length<=this.source[i].length&& this.source[i].substr(0,val.length) == val){

bak.push(this.source[i]);

}

}

if(bak.length == 0){                                                    //如果没有匹配的数据则隐藏弹出层

this.pop.style.display='none';

return false;

}//这个弹出层定位方法之前也是用循环offsetParent,但发现ie跟ff下差别很大(可能是使用方式不当),所以改用这个getBoundingClientRect

left=self.getBoundingClientRect().left+document.documentElement.scrollLeft;

top=self.getBoundingClientRect().top+document.documentElement.scrollTop+self.offsetHeight;

with(this.pop){

style.cssText = 'width:'+self.offsetWidth+'px;'+'position:absolute;left:'+left+'px;top:'+top+'px;display:none;';

getElementsByTagName('iframe')[0].setAttribute('width',self.offsetWidth);

getElementsByTagName('iframe')[0].setAttribute('height',self.offsetHeight);

onclick = function(e){

e = e || window.event;

var target = e.srcElement || e.target;

if(target.tagName == 'LI')

self.value = target.innerHTML;

this.style.display='none';

};

}

s = bak.length>this.pop_len?this.pop_len:bak.length;

for(var i=0;i

li.push( '

' + bak[i] +'');

this.pop.getElementsByTagName('ul')[0].innerHTML = li.join('');

this.pop.style.display='block';

}

}).init().bind(document.getElementById('autoCom')).bind(document.getElementById('autoC'));

相关阅读:

javascript实现的鼠标悬停时动态翻滚的导航条

理解JavaScript中的对象 推荐

DEDECMS、帝国CMS和PHPCMS自定义URL规则对比

[php]正则表达式的五个成功习惯

如何做到多筆資料的同步

用ASP开发试题库与在线考试系统(7)

jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果

使用ADO连接到防火墙后的SQL Server

PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】

如何将图片储存在MySQL数据库里

asp下实现代码的“运行代码”“复制代码”“保存代码”功能源码

我们需要对CSS进行缩写的原因

在JavaScript中调用php程序

标记语言——打印样式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值