表单自动补全功能:

  1. bootstrap的bootstrap-typeahead.js
  2. jQuery的autocomplete.js
  3. js实现自动补全

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<style>

body {

margin-left: 0px;

margin-top: 0px;

margin-right: 0px;

margin-bottom: 0px;

}

.auto_hidden {

width: 204px;

border-top: 1px solid #333;

border-bottom: 1px solid #333;

border-left: 1px solid #333;

border-right: 1px solid #333;

position: absolute;

display: none;

}

.auto_show {

width: 204px;

border-top: 1px solid #333;

border-bottom: 1px solid #333;

border-left: 1px solid #333;

border-right: 1px solid #333;

position: absolute;

z-index: 9999; /* 设置对象的层叠顺序 */

display: block;

}

.auto_onmouseover {

color: #ffffff;

background-color: highlight;

width: 100%;

}

.auto_onmouseout {

color: #000000;

width: 100%;

background-color: #ffffff;

}

</style>

</head>

<script language="javascript">

var $ = function(id) {

return "string" == typeof id ? document.getElementById(id) : id;

}

var Bind = function(object, fun) {

return function() {

return fun.apply(object, arguments);

}

}

function AutoComplete(obj, autoObj, arr) {

this.obj = $(obj); //输入框

this.autoObj = $(autoObj);//DIV的根节点

this.value_arr = arr; //不要包含重复值

this.index = -1; //当前选中的DIV的索引

this.search_value = ""; //保存当前搜索的字符

}

AutoComplete.prototype = {

//初始化DIV的位置

init : function() {

this.autoObj.style.left = this.obj.offsetLeft + "px";

this.autoObj.style.top = this.obj.offsetTop + this.obj.offsetHeight

+ "px";

this.autoObj.style.width = this.obj.offsetWidth - 2 + "px";//减去边框的长度2px

},

//删除自动完成需要的所有DIV

deleteDIV : function() {

while (this.autoObj.hasChildNodes()) {

this.autoObj.removeChild(this.autoObj.firstChild);

}

this.autoObj.className = "auto_hidden";

},

//设置值

setValue : function(_this) {

return function() {

_this.obj.value = this.seq;

_this.autoObj.className = "auto_hidden";

}

},

//模拟鼠标移动至DIV时,DIV高亮

autoOnmouseover : function(_this, _div_index) {

return function() {

_this.index = _div_index;

var length = _this.autoObj.children.length;

for ( var j = 0; j < length; j++) {

if (j != _this.index) {

_this.autoObj.childNodes[j].className = ‘auto_onmouseout‘;

} else {

_this.autoObj.childNodes[j].className = ‘auto_onmouseover‘;

}

}

}

},

//更改classname

changeClassname : function(length) {

for ( var i = 0; i < length; i++) {

if (i != this.index) {

this.autoObj.childNodes[i].className = ‘auto_onmouseout‘;

} else {

this.autoObj.childNodes[i].className = ‘auto_onmouseover‘;

this.obj.value = this.autoObj.childNodes[i].seq;

}

}

},

//响应键盘

pressKey : function(event) {

var length = this.autoObj.children.length;

//光标键"↓"

if (event.keyCode == 40) {

++this.index;

if (this.index > length) {

this.index = 0;

} else if (this.index == length) {

this.obj.value = this.search_value;

}

this.changeClassname(length);

}

//光标键"↑"

else if (event.keyCode == 38) {

this.index--;

if (this.index < -1) {

this.index = length - 1;

} else if (this.index == -1) {

this.obj.value = this.search_value;

}

this.changeClassname(length);

}

//回车键

else if (event.keyCode == 13) {

this.autoObj.className = "auto_hidden";

this.index = -1;

} else {

this.index = -1;

}

},

//程序入口

start : function(event) {

if (event.keyCode != 13 && event.keyCode != 38

&& event.keyCode != 40) {

this.init();

this.deleteDIV();

this.search_value = this.obj.value;

var valueArr = this.value_arr;

valueArr.sort();

if (this.obj.value.replace(/(^\s*)|(\s*$)/g, ‘‘) == "") {

return;

}//值为空,退出

try {

var reg = new RegExp("(" + this.obj.value + ")", "i");

} catch (e) {

return;

}

var div_index = 0;//记录创建的DIV的索引

for ( var i = 0; i < valueArr.length; i++) {

if (reg.test(valueArr[i])) {

var div = document.createElement("div");

div.className = "auto_onmouseout";

div.seq = valueArr[i];

div.onclick = this.setValue(this);

div.onmouseover = this.autoOnmouseover(this, div_index);

div.innerHTML = valueArr[i].replace(reg,

"<strong>$1</strong>");//搜索到的字符粗体显示

this.autoObj.appendChild(div);

this.autoObj.className = "auto_show";

div_index++;

}

}

}

this.pressKey(event);

window.onresize = Bind(this, function() {

this.init();

});

}

}

//-->

</SCRIPT>

<body>

<h1 align="center">自动完成函数(Autocomplete Function)</h1>

<div align="center">

<input type="text"

style="width: 300px; height: 20px; font-size: 14pt;" id="o"

onkeyup="autoComplete.start(event)">

</div>

<div class="auto_hidden" id="auto">

<!--自动完成 DIV-->

</div>

<script>

var autoComplete = new AutoComplete(‘o‘, ‘auto‘, [ ‘b0‘, ‘b12‘, ‘b22‘,

‘b3‘, ‘b4‘, ‘b5‘, ‘b6‘, ‘b7‘, ‘b8‘, ‘b2‘, ‘abd‘, ‘ab‘, ‘acd‘,

‘accd‘, ‘b1‘, ‘cd‘, ‘ccd‘, ‘cbcv‘, ‘cxf‘ ]);

</SCRIPT>

</body>

</html>

时间: 2024-10-28 10:53:59

表单自动补全功能:的相关文章

表单自动补全,从后台传值与id进来,并且将id值提交给后台

从后台获取数据,转换成数组格式 var autoComplete = new AutoComplete('keyword', 'auto', [<?php foreach($jqname as $key => $dd){$str=$str."'".$dd['title']."',";}$str=substr($str,0,$str.length-1);echo $str; ?>]);   从后台获取数据,并将其转换成为json格式,设置隐藏域 &l

四十七 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html 1.创建搜索自动补全字段suggest 自动补全需要用到一个字段名称为suggest类型为Completion类型的一个字段 所以我们需要用将前面的elasticsearch-dsl操作elasticsearch(搜索引擎)增加sugg

easyui-combobox 实现简单的自动补全功能

前台: Html页面 <input id="clsydw" name="clsydw" class="easyui-combobox" data-options="" /> JS //自动补全功能 $("#clsydw").combobox({ valueField:'syr', textField:'syr', panelWidth:200, panelHeight:'auto', onCha

c#TextBox输入框自动提示、自动完成、自动补全功能

功能概览 相关属性 TextBox.AutoCompleteCustomSource 属性 获取或设置当 TextBox.AutoCompleteSource 属性设置为 [CustomSource] 时要使用的自定义 T:System.Collections.Specialized.StringCollection. TextBox.AutoCompleteMode 属性 获取或设置一个选项,该选项控制自动完成应用于 TextBox 的方式. 属性值 类型:System.Windows.For

Eclipse自动补全功能和自动生成作者、日期注释等功能设置

以前想实现添加代码作者信息的东西,但不知道怎样实现,今天终于在网上无意中找到解决办法了 Eclipse自动生成作者.日期注释等功能设置 在使用Eclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的. 修改作者.日期注释格式:打开Windows->Preferences->Java->Code Style->Code Templates,点击右边窗口中的Comments,可以看到有很多选项,我们便可对此注释信息模板进行编辑. 如我们希望在一个Java文件

第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html 创建自动补全字段 自动补全需要用到一个字段名称为suggest类型为Completion类型的一个字段 所以我们需要用

debian下增强bash的自动补全功能

在我们新安装的Debian系统时,发现很多命令都不能自动补全,这是很不方便的,因为每个人的精力都是有限的,不是对每个命令的每一个细节都能完全记住,因此自动补全是一个很实用的功能!对于Debian操作系统,我们可以使用下列方法进行增强命令的自动补全功能! 修改/etc/bash.bashrc文件,将 #if [ -f /etc/bash_completion ]; then # . /etc/bash_completion #fi 前面的#去掉 修改/etc/profile文件,在最后增加一行 s

【Qt编程】自动补全功能

最近写了一个查单词的类似有道词典的软件,里面就有一个自动补全功能(即当你输入一个字母时,就会出现几个候选项).这个自动补全功能十分常见,百度搜索关键词时就会出现.不过它们这些补全功能都是与你输入的进行首字匹配,有时也会不方便.例如,如果我输入一个"好",如果是首字匹配的话会出现下图: 如果是句中匹配的话,则是这种情况: 你可以根据自己的要求进行选择哪一种模式. Qt中自带QCompleter类来实现上面的自动补全功能,读者可以在Qt自带的demo中很容易的学会该类的使用.下面我要讲的是

vim基础学习之自动补全功能

本章我们学习自动补全功能1.自动补全优先从当前的编辑区获得补全列表例如:我们写下如下内容 aaaaa aabbb aaab 当我们再次输入aa,然后我们按下Tab的时候,会弹出一个包含 aaaaa aabbb aaab的列表触发补全模式的条件1.插入模式下 ctrl+p ctrl+n 或者Tab 同时,ctrl+p ctrl+n还能够上下移动选中补全列表项还有其他的补全方法,如下这些方法都是以ctrl + x来启动的,然后跟着你想要的补全样式 1.<c-n>-普通关键字 2.<c-x&g