- 浏览: 151027 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (133)
- javaSE (10)
- Struts (3)
- Servlet (1)
- Jdbc (13)
- Hibernate (1)
- JavaScript (6)
- jsp (8)
- 设计文档 (0)
- 异常记录 (1)
- 其它 (7)
- sql (6)
- xml (6)
- AJAX (9)
- html (4)
- NetBean (2)
- 敏捷 (4)
- EJB (7)
- 综合 (10)
- Android (0)
- Tomcat (3)
- GWT (7)
- Web开发工具 (5)
- Photo Display (1)
- Start and Stop Server (0)
- JQuery 1.4 API (1)
- OpenOffice 标题 (1)
- JQuery弹出窗口 (1)
- JQuery Select (1)
- WCS Acpload (0)
- Loading Images (1)
- websphere commerce (14)
最新评论
参考cssrain.cn上的一个demo,做了些修改,支持连续输入
[img]
http://dl.iteye.com/upload/attachment/435112/ee8f1c67-04e4-3a2c-b71f-692d12ff66e4.png
[/img]
[img]
http://dl.iteye.com/upload/attachment/435112/ee8f1c67-04e4-3a2c-b71f-692d12ff66e4.png
[/img]
<!-- To change this template, choose Tools | Templates and open the template in the editor. --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>自动提示</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type = "text/javascript"> //update 2010-07-06 //增加可以连续输入多个,中间用逗号分开 /*********************************************** * Global variables ***********************************************/ var maxResults = 10; // max # of results to display var ignoreKeys = ""; //设置忽略的关键字 var sMultiply =false; //是否可以连续输入 /*********************************************** * Prototype for populating data ***********************************************/ function get_data() {} /*********************************************** * Find search keys in data set ***********************************************/ function suggest(keywords,key,inputID,dataID,multiply) { var results = document.getElementById("results"); sMultiply = multiply; var theinput=null; if(sMultiply){ //keywords =keywords.toString(); //将input的内容用split截取成数组,最多返回1000个 theinput =keywords.split(",", 1000); //当输入为多个时只需要匹配最后一 if(theinput.length>=1){ keywords =theinput[theinput.length-1]; } }else{ keywords =keywords.toString(); } if(keywords != "") { //获得数据 var terms = get_data(dataID); // sort? -- data should be alphabetical for best results var ul = document.createElement("ul"); var li; var a; if ((key.keyCode == '40' || key.keyCode == '38' || key.keyCode == '13')) { navigate(key.keyCode,theinput,inputID); } else { var kIndex = -1; for(var i = 0; i < terms.length; i++) { kIndex = terms[i].activity.toLowerCase().indexOf(keywords.toLowerCase()); if(kIndex == 0) { li = document.createElement("li"); // setup the link to populate the search box a = document.createElement("a"); a.href = "javascript://"; a.setAttribute("rel",terms[i].val); a.setAttribute("rev", getRank(terms[i].activity.toLowerCase(), keywords.toLowerCase())); //if(!document.all) a.setAttribute("onclick","populate(this,theinput);"); //else //鼠标点击选中li进行提交 a.onclick = function() { populate(this,theinput,inputID); } a.appendChild(document.createTextNode("")); if(keywords.length == 1) { var kws = terms[i].activity.toLowerCase().split(" "); var firstWord = 0; for(var j = 0; j < kws.length; j++) { // if(kws[j].toLowerCase().charAt(0) == keywords.toLowerCase()) { ul.appendChild(li); if(j != 0) { kIndex = terms[i].activity.toLowerCase().indexOf(" " + keywords.toLowerCase()); kIndex++; } break; // } } } else if(keywords.length > 1) { ul.appendChild(li); } else continue; var before = terms[i].activity.substring(0,kIndex); var after = terms[i].activity.substring(keywords.length + kIndex, terms[i].activity.length); //a.innerHTML = before + "<strong>" + keywords.toLowerCase() + "</strong>" + after; var middle = terms[i].activity.substring(kIndex,keywords.length+kIndex); a.innerHTML = before + "<strong>" +middle + "</strong>" + after; li.appendChild(a); } } if(results.hasChildNodes()) results.removeChild(results.firstChild); // position the list of suggestions var s = document.getElementById(inputID); var xy = findPos(s); results.style.left = xy[0] + "px"; results.style.top = xy[1] + s.offsetHeight + "px"; results.style.width = s.offsetWidth + "px"; // if there are some results, show them if(ul.hasChildNodes()) { results.appendChild(filterResults(ul)); if(results.firstChild.childNodes.length == 1) results.firstChild.firstChild.getElementsByTagName("a")[0].className = "hover"; } } } else { if(results.hasChildNodes()) results.removeChild(results.firstChild); } } /*********************************************** * Rank results - used for sorting result sets * 0 if entire row starts with kw * 0 < i < 1 if any word in row starts with kw (1k char max) * i > 1 if row contains kw anywhere else ***********************************************/ function getRank(activity, keywords) { var ret = -1; var kIndex = activity.indexOf(keywords); ret = (activity.charAt(kIndex - 1) == " ") ? kIndex : (200*kIndex); return ret; } /*********************************************** * Sort the result suggestion sets ***********************************************/ function filterResults(s) { var sorted = new Array(); for(var i = 0; i < s.childNodes.length; i++) { sorted.push(s.childNodes[i]); } var ul = document.createElement("ul"); var lis = sorted.sort(sortIndex); for(var j = 0; j < lis.length; j++) { if(j < maxResults) ul.appendChild(lis[j]); else break; } return ul; } function sortIndex(a,b) { // wow thats ugly -- need logic around grouped items getting out of order return (a.getElementsByTagName("a")[0].rev - b.getElementsByTagName("a")[0].rev); } /*********************************************** * Navigate using up/down and submit with 'Enter' ***********************************************/ function navigate(key,theinput,inputID) { var results = document.getElementById("results"); var keyIndex = document.getElementById("keyIndex"); var i = keyIndex.value; if(i == "" || !i) i = -1; else i = parseFloat(i); var ul = results.childNodes[0]; if(ul) { if(key == '40') // DOWN { i++; if(i > ul.childNodes.length-1) i = ul.childNodes.length-1; keyIndex.value = i; try { ul.childNodes[i].getElementsByTagName("a")[0].className = "hover"; ul.childNodes[i-1].getElementsByTagName("a")[0].className = ""; } catch(e) {} } else if(key == '38') // UP { i--; if(i <= 0) i = 0; keyIndex.value = i; try { ul.childNodes[i].getElementsByTagName("a")[0].className = "hover"; ul.childNodes[i+1].getElementsByTagName("a")[0].className = ""; } catch(e) {} } else if(key == '13' || key == '9') // ENTER/TAB -- POPULATE { if(i == -1) i = 0; populate(ul.childNodes[i].getElementsByTagName("a")[0],theinput,inputID); } else return; } } /*********************************************** * Allow for using tab onkeydown ***********************************************/ function tabfix(keywords, key) { if(key.keyCode == '9') { navigate(key.keyCode); return false; } else return true; } /*********************************************** * Populate hidden fields via onclick on 'Enter' ***********************************************/ function populate(a,theinput,inputID) { var ul = document.getElementById("results").childNodes[0]; var inputold=""; var inputObj =document.getElementById(inputID); var pick; try { if(theinput != null){ pick = a.innerHTML.replace("<strong>","").replace("</strong>","")+","; // IE6 converts HTML elements to uppercase -- could be done with RegExp if(document.all) pick = a.innerHTML.replace("<STRONG>","").replace("</STRONG>","")+","; if(theinput.length>=1){ //多项输入时要用到 //重新将当前输入值前的值添加到input标签里 for(var i=0; i<theinput.length-1;i++){ inputold=inputold+theinput[i]+","; //alert("the input:"+i+theinput[i]); // alert("the input old:"+inputold); } } //添加新配置的值 inputObj.value=inputold+pick; //alert("jdl"); //alert("inputlength:"+theinput.length); //document.getElementById("s").value = pick; }else{ pick = a.innerHTML.replace("<strong>","").replace("</strong>",""); // IE6 converts HTML elements to uppercase -- could be done with RegExp if(document.all) pick = a.innerHTML.replace("<STRONG>","").replace("</STRONG>",""); inputObj.value=pick; } } catch(e) {} clearSuggest(); } /*********************************************** * Find an elements position on the screen ***********************************************/ function findPos(obj) { var curleft = curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft curtop = obj.offsetTop while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } return [curleft,curtop]; } /*********************************************** * Helper to preserve onclick on suggestions ***********************************************/ function clearSuggest() { // need a timeout so the onclick event is captured before results are hidden setTimeout("hideSuggest()",200); //time setѡ ʱ } /*********************************************** * Hide the suggestions list and remove from DOM ***********************************************/ function hideSuggest() { var results = document.getElementById("results"); if(results.hasChildNodes()) results.removeChild(results.firstChild); document.getElementById("keyIndex").value = "-1"; // reset the suggestions index } // get list values; function getListvalues(listID) { var options = this.getOptions(listID); var values = new Array(); //alert("options length:"+options.length); for (var i = 0; i < options.length; i++) { var flag = true; for(var j=0; j<values.length; j++){ if(values[j] == options[i].innerText){ flag = false; break; } } if(flag){ values.push(options[i].innerText); } } // alert("values length"+values.length); return values; } function get_data(dataID ) { var terms = new Array(); // var values2 = getListvalues("fromLocation_ces"); //获取其它控件的值放入数组中 /* var values2 = getListvalues(dataID); for(var i=0;i<values2.length;i++){ terms.push({val:1,activity:values2[i]}); } */ //alert("from location list values size:"+values2.length); // alert("values2[0]"+values2[0]); var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; for(var i=0;i<months.length;i++){ terms.push({val:1,activity:months[i]}); } return terms; } </script> <style type = "text/css"> .nodisplay { display: none; } label { float: left; font: normal 12px Arial; width: 80px; } #s { width: 300px; } #results { position: absolute; top: 0; left: 0; width: 300px; } #results ul { border: 1px solid #bfbfbf; margin: 0; padding: 0; list-style: none; width: 100%; } #results ul li { text-align:left; } #results ul li a { display: block; color: #444; background: #fff; font: normal 12px arial; text-decoration: none; padding: 1px 4px 2px 6px; } * html #results ul li a { width: 100%; } #results ul li a strong { color: red; } #results ul li a:hover, #results ul li a.hover { background: #0056f4; color: #fff; } #results ul li a:hover strong, #results ul li a.hover strong { color: #fff; } </style> </head> <body> <!--参数设置为true 可以多选,中间用[,]隔开--> <input id="fromRetailGroup" type="text" onkeyup="suggest(this.value,event,this.id,'fromAndToRetailGroupList',false);" onkeydown="return tabfix(this.value,event);" onblur="clearSuggest();" style="width:170px"/> <!--结果显示区域--> <p class="nodisplay"> <label>kIndex</label> <input class="nodisplayd" type="text" id="keyIndex" /> </p> <p class="nodisplay"> <label>rev</label> <input class="nodisplayd" type="text" id="sortIndex" /> </p> <div id="results"></div> </body> </html>
发表评论
-
JQuery autocomplete Spring mvc
2015-06-13 03:42 0http://www.simplecodestuffs.com ... -
JQuery Select
2012-03-17 14:22 948最近使用JQuery来编写前端js脚本,涉及到依据下拉框的值确 ... -
JQuery弹出窗口
2012-03-16 23:22 499http://www.ericmmartin.com/proj ... -
图片预览
2011-03-14 13:51 583图片预览: http://exposure.blogocra ... -
javascript date 验证yyyy/MM/dd yyyy-MM-dd
2010-07-23 17:55 2868//验证日期格式为 yyyy/MM/dd 或 yyyy ... -
js动态生成表格
2010-07-14 15:11 809用js动态生成表格排列 checkbox 将该段代码放入bod ...
相关推荐
这个效果通常用于检测用户输入的文本,比如验证表单、实现智能提示或者进行关键词匹配等。 在JavaScript中,文本判断通常涉及到字符串操作和正则表达式。字符串操作允许我们获取、修改和比较文本内容,例如`...
JavaScript是一种广泛应用于网页编程的语言,它是基于对象和事件驱动的脚本语言,常用于增强网页的交互性、动态效果和数据处理能力。在学习JavaScript时,我们通常会从以下几个重要知识点入手: 1. JavaScript的...
- "带阴影的可拖动的浮动层.htm"展示了如何创建有阴影效果且可拖动的浮动窗口,常用于提示信息或设置面板。 - "JS模拟键盘密码输入器.htm"可能是一个用JavaScript模拟的软键盘,用于在输入密码时增加安全性,防止...
通过实现特定的程序功能,如倒计时加载网页、确认删除提示以及文字跑马灯效果等,程序员可以学习到如何对网页元素进行动态控制,以及如何通过JavaScript增加用户交互的趣味性和网站的可用性。 ### 6. 时间格式转换 ...
3. **CSS样式**:一个.css文件可能用于定义自动完成组件的外观,包括输入框、提示列表的样式,以及选中项的高亮效果等。 4. **示例或测试**:可能包含一个index.html文件,用于展示如何使用这个自动完成组件,并...
Javascript实现的网页文本框输入提示 实现原理: 文本框输入内容后,搜索字符串数组,将匹配内容写入DIV以下拉列表形式展现,并支持方向键选择,效果类似搜索网站的输入提示。 友情提示: 较为粗糙的实现方法,...
JavaScript五子棋AI小游戏是一款基于Web的互动娱乐项目,它利用了JavaScript编程语言来实现棋盘游戏五子棋的功能,并且包含了一个简单的AI系统,可以让玩家与计算机进行对战。这款小游戏不仅展示了JavaScript在交互...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态效果。在这个"javascript智能提示框小例子"中,我们将会探讨如何使用JavaScript创建自定义的提示框,以提供比浏览器默认...
这里的`type="text"`定义了这是一个文本输入框,`id="myInput"`则为该输入框分配了一个唯一的标识符,`placeholder`属性用于在输入框内显示提示信息。 二、JavaScript获取输入框内容 1. `value`属性 JavaScript可以...
- **弹窗操作**:`alert()`、`prompt()`和`confirm()`分别用于显示提示消息、获取用户输入和确认操作。 - 示例代码: ```javascript alert("Hello, World!"); var name = prompt("What is your name?", "Your ...
2. **鼠标悬停提示**:类似于163登录后的提示效果,这通常通过`title`属性或自定义JavaScript事件实现,当鼠标悬停在元素上时显示额外信息。 3. **文字省略号显示**:当文本内容超过指定宽度时,使用CSS的`text-...
<title>JavaScript 实现效果 * { margin: 0px; padding: 0px; font-size: 12px; } input { width: 100px; height: 20px; border: 1px solid #ccc; } <script language="javascript"> function ...
JavaScript提示类是网页交互中常用的一种功能,它用于向用户显示信息、确认操作或获取用户输入。在JavaScript中,有三种基本的内置提示对话框:`alert()`、`prompt()`和`confirm()`,它们都是window对象的方法。 1....
- **弹框提示**:使用`alert()`、`prompt()`或`confirm()`函数向用户显示信息、获取输入或确认操作。 - **表单验证**:在用户提交表单前,使用JavaScript进行前端验证,提高用户体验。 - **AJAX异步通信**:通过...
5. **表单验证**:JavaScript可以对用户输入进行实时验证,如检查邮箱格式、长度限制、非空验证等,提高用户体验。 6. **拖放功能**:HTML5引入了拖放API,JavaScript可以利用它创建可拖放的元素,实现更丰富的用户...
3. **输入提示(Prompt)**:`prompt()`函数允许开发者向用户请求输入,返回用户的输入值,可以用于简单的表单填写或获取用户反馈。 4. **DOM操作**:JavaScript可以通过Document Object Model (DOM)来操作网页元素...
总结,用JavaScript进行错误提示不仅涉及基本的验证逻辑,还包括了DOM操作、CSS样式、动画效果等多方面的技术。通过合理的错误处理和良好的用户体验设计,我们可以创建出既美观又实用的错误提示系统。同时,考虑无...
这个项目“ASP.NET+Sqlserver 2008+JS智能提示框输入”就是一个典型的示例,它结合了多种技术来实现一个功能,即在用户输入时提供智能提示。下面我们将详细探讨这些技术及其在项目中的应用。 首先,ASP.NET是微软...
为了实现类似百度的输入提示效果,还需要考虑性能优化,如限制请求频率、缓存最近的查询结果,以及在用户输入过程中对请求进行节流和防抖处理,以减少不必要的网络请求。 总的来说,模拟百度提示是一个结合了前端...
【JavaScript用户注册提示效果实现详解】 在Web开发中,用户注册界面通常需要提供实时的反馈,以指导用户正确填写信息。这个简单的JavaScript实例展示了如何在用户注册表单中实现这样的提示效果。通过JavaScript,...