您的位置:首页 > Web前端 > JavaScript

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

2008-04-24 19:07 281 查看
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处http://xinyistudio.vicp.net/和作者信息及本声明(接上文)在函数的最后结尾处设置文本框聚焦,以便用户敲入的字符可以代替选择的文本。functiontextboxSelect(oTextbox,iStart,iEnd){

switch(arguments.length){
case1:
oTextbox.select();
break;

case2:
iEnd=oTextbox.value.length;
/*fallsthrough*/

case3:
if(isIE){
varoRange=oTextbox.createTextRange();
oRange.moveStart("character",iStart);
oRange.moveEnd("character",-oTextbox.value.length+iEnd);
oRange.select();
}elseif(isMoz){
oTextbox.setSelectionRange(iStart,iEnd);
}
}

oTextbox.focus();
}Ø替换文本框中选择的文本(译者注:该功能似乎用处不大,读者直接跳过)-----------另一项任务是我们需要用一些其它的文本来替换当前选择的文本,为此,创建了textboxReplaceSelect()方法,它有两个参数:作用于的文本框对象和要插入的文本。在这里我们要用到TextRange对象,我们需要为IE和Mozilla建立不同的代码,让我们先给出IE的代码:functiontextboxReplaceSelect(oTextbox,sText){

if(isIE){
varoRange=document.selection.createRange();
oRange.text=sText;
oRange.collapse(true);
oRange.select();
}elseif(isMoz){
...
}

oTextbox.focus();
}在上面的第4行,从文档当前选择区创建了TextRange对象(可以设想一下在文本框中,由onkeypress事件触发调用),随后的一行我们用给定的字符串替换在选择范围中的文本,在第6行中,调用了TextRange对象的collapse方法,设置选择范围的宽度为0;其中的布尔型参数如果是true,光标会偏向选择范围的结束处,反之。最后,我们用select()方法将光标确定在选择范围的结束处。在Mozilla浏览器中利用string对象的一些简单操作来完成相同的效果。我们可以用文本框对象的selectionStart和selectionEnd属性来确定选择的起始和结束点:functiontextboxReplaceSelect(oTextbox,sText){

if(isIE){
varoRange=document.selection.createRange();
oRange.text=sText;
oRange.collapse(true);
oRange.select();
}elseif(isMoz){
variStart=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();
}在上面的第9行,保存了选择的起始点,第10行看起来挺费解的,事实上这行代码只是用于得到所选择文本前、后的字符串,并在它们之间添加要替换的字符串文本。接下来的一句代码是需要纠正一下光标在文本后的位置――开始点位置加上所替换文本的长度。Ø匹配―――――――――下步需要处理的是写一个方法:给定的一个字符串A,在一个string数组中搜索并返回起始处使用了这个字符串A的第一个字符串值B(例如:通过’a’在string数组中查找起始位置使用”a”的字符串值”abcd”)。这个方法的名称是autocompleteMatch(),它有两个参数:需要匹配的文本和被匹配的所有文本值的数组。直接搜索――反复地检查数组中的每个值。方法返回以true的形式返回一个值,否则如果没有匹配的值找到,将返回null。全部代码如下:
functionautocompleteMatch(sText,arrValues){

for(vari=0;i<arrValues.length;i++){
if(arrValues[i].indexOf(sText)==0){
returnarrValues[i];
}
}

returnnull;

}
需要注意的是:为保证这函数能够正确工作,你应该将数组中的字符串按字母排序。
(一)(二)(三)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: