分享
 
 
 

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

王朝html/css/js·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

(本文适合中高级读者)

译者序:

为了获取用户更多的信息,你不惜网站页面中产生了大量的文本框,选单,列表框,当用户看到如此繁多的需要输入或选择项,很有可能为此产生厌倦并最终离开你的网站。

采用Javascript对输入文本框更好的设计,能够尽可能的避免上述问题,希望本篇译文能够对你在web页面的开发设计当中有所帮助,译文翻译错误难免,望大家批评指正。

今天人们最不愿意面对的就是填写大量的表单(form),特别是那些需要敲入字符的文本框(就是我们经常用的<input type=text> html标记, 以后为方便就称为文本框)。

微软在outlook中结合了可自动完成输入的文本框--文本框检查由用户输入的少量的字符,然后从给定的下拉列表中给出一个建议的词。同样的,当你开始在web地址栏中填入一个url地址,你的Web浏览器会给你推荐一个url的下拉列表单。

在这篇教程中用了一点点Javascript的控制,我们将创建具有与IE(版本5.5或更高)

和Mozilla(版本1.0或更高)浏览器相类似行为的输入文本框。

Ø 简单的浏览器检测

-----------

首先,我们需要做一个浏览器的检测,下面是一些简单的代码(这个过程可以用你自已写的代码替代它)

var isOpera = navigator.userAgent.indexOf(“Opera”) > -1;

var isIE = navigator.userAgent.indexOf(“MSIE”) > 1 && !isOpera;

var isMoz = navigator.userAgent.indexOf(“Mozilla/5.”) == 0 && !isOpera;

这代码很明显不是非常完善,但它看来对于我们要达到的目的已足矣。让我们开始这个项目吧。

Ø 选择文本框

---------――

在这过程的第一步是创建一个方法,这个方法可以在一个文本框中选择确定的文本数。我将

调用这个方法 textboxSelect() , 它有三个参数,第一个参数是让这个方法作用于的对象:oTextbox;第二个参数是非必选项,它指示了选择的起始位置(如果这个参数被忽略,那么全部的文本都被选择);第三个参数,同样是非必选项,指示了选择的结束位置。如果提供了第二个参数,但第三个参数未提供,在文本框中被选的文本将从起始位置到结束位置。

我们写一个非常容易理解的格式:如果仅有一个参数提供,那么我们就使用文本框的原型方法select() 在这个文本框中以选择所有的文本:

function textboxSelect(oTextbox, iStart, iEnd) {

switch(arguments.length) {

case 1:

oTextbox.select();

break;

...

}

}

在这里我们使用了switch语句测试有多少个参数输入。如果仅有一个,即只有oTextbox被

输入。下一步, 我们跳到有三个参数都被选择的case语句的开始处(iStart和iEnd都被选择)。

这里,我们需要用一个浏览器检测一下这个方法所做的一切,对于IE浏览器,我们将使用一个文本范围对象。

function textboxSelect (oTextbox, iStart, iEnd) {

switch(arguments.length) {

case 1:

oTextbox.select();

break;

case 3:

if (isIE) {

var oRange = oTextbox.createTextRange();

oRange.moveStart("character", iStart);

oRange.moveEnd("character", -oTextbox.value.length + iEnd);

oRange.select();

} else if (isMoz) {

...

}

}

}

在粗体代码中,我们从一个text range对象(由文本框对象创建的文本范围对象TextRange)开始,TextRange设置了文本选择范围的起始和结束坐标,要调整这开始坐标我们用moveStart() 方法;这个方法给出了两个参数:参数一是移动间隔类型,代码中使用了”character”(字符)类型 ;参数二是移动多少个间隔,比如移动了5个间隔那么就由参数一”character”得知移动了5个字符, 如果参数一是”word”(词),那么就移动了5个词。(译者注:关于TextRange对象的方法详细说明详见MSDN)。moveEnd()有同样的参数,稍有不同的是其第二个参数必须是负数(译者注:在MSDN2001中查得这个参数可以是正数,可能原作者考虑到IE版本较低的问题),你可以想象为移动到被选择文本结束处,然后后退一个间隔,后退两个间隔…。为了获得moveEnd()的第二个参数,我们将赋给 iEnd文本框中文本长度的负值, 因此,如果iEnd 是8且文本框中有10个字符,第二个参数变为-2,选择范围会将结束点会后退2个字符。最终,我们调用select() 方法在文本框中加亮选择的范围。

为Mozilla浏览器完成上面这些事情居然更容易办到。

文本框对象有一个setSelectionRange() 方法,它有两个参数:选择的开始和结束位置,可以直接通过iStart 和 iEnd 设定:

function textboxSelect (oTextbox, iStart, iEnd) {

switch(arguments.length) {

case 1:

oTextbox.select();

break;

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);

}

}

}

现在我们返回到上一个case语句处,即只赋给了两个参数(iEnd 未赋值)的case语句处。

实际上,与赋三个参数不同的是iEnd 必须等于在文本框中字符串的长度就可以了。像下面这样实现:

function textboxSelect (oTextbox, iStart, iEnd) {

switch(arguments.length) {

case 1:

oTextbox.select();

break;

case 2:

iEnd = oTextbox.value.length;

/* falls through 由case3继续处理*/

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);

}

}

}

在上面的case 2 中我们没有使用

break 语句,只是在执行完case 2后的语句后再进入下一个case语句。

(一) (二) (三)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有