`
happmaoo
  • 浏览: 4476033 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用Javascript制作一个可自动填写的文本框(全文完)

阅读更多

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处http://xinyistudio.vicp.net/和作者信息及本声明

Ø autocomplete()的补充

autocomplete() 方法补充一下,我们先到可自动完成的文本框标记中看一下(译者注<input type=text>),autocomplete()方法将给出三个参数:作用于的文本框的对象oTextbox对象,event(事件)对象。调用方法如下:

<input type=”text” onkeyup=”return autocomplete(this, event, arrValues)” />

考虑到在文本框中触发onkeypress事件(译者更正:应该使用onkeyup事件,以保证字符已被输入)的第一个键的键码:

function autocomplete(oTextbox, oEvent, arrValues) {

switch (oEvent.keyCode) {

...
}
}

有许多按键需要被屏蔽,如光标键,只需要在下面指定的case语句中返回true

function autocomplete(oTextbox, oEvent, arrValues) {

switch (oEvent.keyCode) {
case 38: //
á
case 40: //
â
case 37: //
ß
case 39: //
à
case 33: // Page Up

case 34: // Page down

case 36: // Home

case 35: // End

case 13: // Enter

case 9: // Tab

case 27: // Esc

case 16: // Shift

case 17: // Ctrl

case 18: // Alt

case 20: // Caps Lock

case 8: //
退格键
case 46: // Delete

return true;
break;
...

}
}

默认的case语句:当用户键入一个字符。

在这个case语句中需要完成以下几个步骤:

1. 用键入的字符替换已选择的文本。(译者注:这一步似乎并没有必要)

2. 键入文本时试着得到一个匹配的文本。

3. 如果找到,为文本框建议一个应该输入的文本,并选择这些用户无需键入的匹配文本。

这个步骤最重要的是确定用户键入的字符(由event对象的keyCode属性(IE)charCode属性(Mozilla)得到键码,并使用String.fromCharCode () 方法将键码转为字符,用这字符替换当前选择的文本,然后我们需要得到文本框中文本的长度。

function autocomplete(oTextbox, oEvent, arrValues) {

switch (oEvent.keyCode) {
case 38: // á
case 40: // â
case 37: // ß
case 39: // à
case 33: // Page Up
case 34: // Page down
case 36: // Home
case 35: // End
case 13: // Enter
case 9: // Tab
case 27: // Esc
case 16: // Shift
case 17: // Ctrl
case 18: // Alt
case 20: // Caps Lock
case 8: // 退格键
case 46: // Delete
return true;
break;


default:
textboxReplaceSelect(oTextbox, String.fromCharCode(isIE ? oEvent.keyCode : oEvent.charCode); //
译者注:这一步似乎并无必要,因此在文章结束的示例代码中将这一行去掉
var iLen = oTextbox.value.length;
...

}
}

下面用autocompleteMatch() 方法在数组中查找一个相匹配的值:

function autocomplete(oTextbox, oEvent, arrValues) {

switch (oEvent.keyCode) {
case 38: // á
case 40: // â
case 37: // ß
case 39: // à
case 33: // Page Up
case 34: // Page down
case 36: // Home
case 35: // End
case 13: // Enter
case 9: // Tab
case 27: // Esc
case 16: // Shift
case 17: // Ctrl

case 18: // Alt
case 20: // Caps Lock
case 8: // 退格键
case 46: // Delete
break;

default:
textboxReplaceSelect(oTextbox, String.fromCharCode(isIE ? oEvent.keyCode : oEvent.charCode);
var iLen = oTextbox.value.length;

var sMatch = autocompleteMatch(oTextbox.value, arrValues);

...
}
}

在请求得到一个匹配值后,我们需要确定如果这个匹配值确实已经找到。测试一下sMatch值,如果它不是null,则需要用sMatch来替换文本框中的文本。然后我们使用iLen(由用户键入的实际文本长度)来作为textboxSelect () 方法的输入参数,以选择那些已被匹配的文本(sMatch)

function autocomplete(oTextbox, oEvent, arrValues) {

switch (oEvent.keyCode) {
case 38: //up arrow
case 40: //down arrow
case 37: //left arrow
case 39: //right arrow
case 33: //page up
case 34: //page down
case 36: //home
case 35: //end
case 13: //enter
case 9: //tab
case 27: //esc
case 16: //shift
case 17: //ctrl
case 18: //alt
case 20: //caps lock
case 8: //backspace
case 46: //delete
return true;
break;

default:
textboxReplaceSelect(oTextbox, String.fromCharCode(isIE ? oEvent.keyCode : oEvent.charCode);
var iLen = oTextbox.value.length;

var sMatch = autocompleteMatch(oTextbox.value, arrValues);

if (sMatch != null) {
oTextbox.value = sMatch;
textboxSelect(oTextbox, iLen, oTextbox.value.length);
}


...
}
}

做完这些事后,我们必须在处理方法的最后加上return false,否则,输入的字符会出现两次。

=====================================================================

Ø 示例代码(为IE浏览器):

说明:该示例码在NetScapeOprea浏览器中可能不会很好的执行,另外,如果你了非键盘输入(鼠标复制/粘贴),也不会执行。

var isOpera = navigator.userAgent.indexOf("Opera") > -1; var isIE = navigator.userAgent.indexOf("MSIE") > 1 && !isOpera; var isMoz = navigator.userAgent.indexOf("Mozilla/5.") == 0 && !isOpera; function textboxSelect (oTextbox, iStart, iEnd) { switch(arguments.length) { case 1: oTextbox.select(); break; case 2: iEnd = oTextbox.value.length; /* falls through */ case 3: if (isIE) { var oRange = oTextbox.createTextRange(); oRange.moveStart("character", iStart); oRange.moveEnd("character", -oTextbox.value.length + iEnd); oRange.select(); } else if (isMoz){ oTextbox.setSelectionRange(iStart, iEnd); } } oTextbox.focus(); } /* function textboxReplaceSelect (oTextbox, sText) { if (isIE) { var oRange = oTextbox.createTextRange(); oRange.text = sText; oRange.collapse(true); oRange.select(); } else if (isMoz) { var iStart = oTextbox.selectionStart; oTextbox.value = oTextbox.value.substring(0, iStart) + sText + oTextbox.value.substring(oTextbox.selectionEnd, oTextbox.value.length); oTextbox.setSelectionRange(iStart + sText.length, iStart + sText.length); } oTextbox.focus(); } */ function autocompleteMatch (sText, arrValues) { for (var i=0; i var arrValues = ["red", "orange", "yellow", "green", "blue", "indigo", "violet", "brown"];

Autocomplete Textbox Example

Type in a color in lowercase:输入一个以小写字母开头的颜色(英文单词)

(一) (二)(三)

分享到:
评论

相关推荐

    文本框邮箱自动完成

    jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画制作和Ajax交互。在"文本框邮箱自动完成"的场景中,jQuery可以监听文本框的输入事件,当用户输入字符时,触发一个函数来查找匹配的邮箱地址。 ...

    程序天下:JavaScript实例自学手册

    13.31 用JavaScript制作的特色时钟 13.32 自定义的日历 13.33 生日提醒器 13.34 时间的倒影 13.35 使用正则表达式验证日期 13.36 全面的日期选择功能 13.37 全球的时间查看表 13.38 无刷新定时取数据 13.39 取当月的...

    用excel自动填充网页表单

    标题“用Excel自动填充网页表单”简明扼要地概括了本文的主要内容:如何利用Microsoft Excel中的编程技术来实现自动填写网页上的表单。 #### 描述解析: 描述部分提供了更具体的信息:“代码实现用Excel表格中数据...

    《程序天下:JavaScript实例自学手册》光盘源码

    13.31 用JavaScript制作的特色时钟 13.32 自定义的日历 13.33 生日提醒器 13.34 时间的倒影 13.35 使用正则表达式验证日期 13.36 全面的日期选择功能 13.37 全球的时间查看表 13.38 无刷新定时取数据 13.39 取当月的...

    js实现点击文本框显示日期选择器特效代码分享

    标题中提到的“js实现点击文本框显示日期选择器特效代码分享”,表明本文要探讨的是使用JavaScript语言开发一个点击文本框后能够弹出日期选择器的Web特效。这种特效在网页中较为常见,特别是在需要用户选择日期的...

    使用C++制作ocx控件

    2. 注册成功后,打开工程项目,直接将 OCX 控件拖入控件资源框中即可使用,为控件添加变量后,在工程文件中回=会自动添加几个文件,如图成功后就可调用控件的接口了。 四、JS 调用 OCX 控件方法 JS 调用 OCX 控件...

    软件测试-自动化测试-web自动化-教学研究

    自动化测试是一种使用软件工具执行预定义的测试案例来自动验证产品的行为,以确保软件应用程序按预期运行的过程。这种方法有助于提高测试效率、减少人为错误并缩短发布周期。 **二、自动化测试在Web开发中的应用** ...

    html日记本

    在这个HTML日记本中,可能会使用`&lt;form&gt;`标签来创建输入表单,让用户填写日记内容,同时可能用到`&lt;input&gt;`标签来设定文本框、日期选择器等输入控件。 CSS(层叠样式表)则负责网页的布局和视觉样式。通过选择器如...

    EXT制作的FORM,可以与Servlet进行交互

    EXT是一个强大的JavaScript库,主要用于构建富客户端应用。它提供了一系列组件化的UI元素,包括我们这里提到的FORM,用于用户输入和数据交互。EXT form是EXT框架中的一个关键部分,允许开发者创建复杂的表单结构,...

    html5手机版问卷

    总结来说,这个HTML5手机版问卷模板利用了HTML5的新特性,如语义化标签、响应式设计、本地存储和强大的JavaScript API,提供了一个轻量级、可定制的移动端问卷解决方案。开发者可以根据自己的需求对模板进行扩展和...

    HTML旅游网页设计制作 DW旅游网站官网滚动网页 DIV旅游风景介绍网页设计.md

    - **提交处理**: 当用户填写完表单并提交后,可以通过JavaScript进行简单的客户端验证,然后通过服务器端脚本进一步处理数据。 #### 8. **网站效果展示** - **设计效果**: 本项目强调简洁大方的设计风格,通过...

    dede服饰自适应表单系统

    总的来说,"dede服饰自适应表单系统"是一个功能强大的工具,它集成了前端开发的三大核心技术:HTML、CSS和JavaScript,旨在为服装行业提供高效、灵活且易用的数据管理解决方案。无论是在后台管理端还是用户端,都...

    Form-PDF-Builder:生成将被填写以生成 PDF 的表格

    通过上述知识点的解析,我们可以看到“Form-PDF-Builder”不仅是一个工具,而且代表了一种使用JavaScript驱动的动态PDF生成技术,它在数据驱动的文档生成领域具有广泛的应用价值。对于IT专业人士来说,了解并掌握...

    报表软件--Style Report报表数据填报

    - **离线填报样例**:展示了一个典型的离线填报报表,其中包含了多个数据字段和审核审批功能,支持用户自行增加和删除行。 #### 结语 Style Report报表软件以其敏捷、灵活和强大的特性,成为了企业级报表和数据...

    jquery插件制作 自增长输入框实现代码

    在本文中,我们将深入探讨如何使用jQuery来创建一个自增长输入框插件,这将使得文本框的高度能够根据用户输入的内容动态调整。首先,我们来看HTML部分,它包含了一个简单的表单,其中有一个`&lt;textarea&gt;`元素,这个...

    实验指导书

    - 使用VS.NET开发一个名为“幸运52”的游戏应用。 - 设计简洁直观的用户界面,包括主菜单、按钮和导航键等。 - 实现核心的游戏逻辑,包括商品估价、反馈提示等功能。 - 优化界面布局以适应不同尺寸的屏幕。 - ...

    adobe form.pdf

    1. **表单模板设计**:使用Adobe LiveCycle Designer等工具设计表单模板,这一步骤非常重要,因为它直接影响到最终用户的使用体验。 2. **数据绑定**:通过定义数据源(如SAP字段)与表单控件之间的绑定关系,实现...

    JS代码收藏大全

    - **作用**:使用 `noscript` 标签隐藏一个 iframe 来阻止用户保存整个网页。 - **应用场景**:适用于版权保护较为严格的网站,阻止用户保存网页内容。 #### 十、查看网页源代码 - **代码实现**: ```html 查看...

Global site tag (gtag.js) - Google Analytics