日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置

發(fā)布時間:2025/3/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JavaScript實現(xiàn)的通過輸入框中的數(shù)據(jù)長度來控制光標焦點的位置:

在IE中可以使用 onPropertyChange 屬性來控制非常簡單例子:

<!DOCTYPE?? HTML?? PUBLIC?? "-//W3C//DTD?? HTML?? 4.0?? Transitional//EN">
<HTML>
<HEAD>
<TITLE>?? New?? Document?? </TITLE>
<META?? NAME="Generator"?? CONTENT="EditPlus">
<META?? NAME="Author"?? CONTENT="">
<META?? NAME="Keywords"?? CONTENT="">
<META?? NAME="Description"?? CONTENT="">
<SCRIPT?? LANGUAGE="JavaScript">
<!--
function?? lostFocus(obj,length){
?? var?? o=document.all;
?? var?? objLength=obj.value.length;//全角2個字符
?? for(var i=0;i<o.length;i++){
??? if(o[i]==obj&&parseInt(objLength)==length){
???? if((i+1)==o.length){
???? ?? alert("已經(jīng)輸入完畢!");
???? ?? return;
???? }
???? else?? o[i+1].focus();
??? }???
?? }
}
//-->
</SCRIPT>
</HEAD>
??
<BODY>
<INPUT?? TYPE="text"?? NAME="ipt"??? onPropertyChange="lostFocus(this,5)">
<INPUT?? TYPE="text"?? NAME="ipt2"?? onPropertyChange="lostFocus(this,5)">
</BODY>
</HTML>

以上代碼在IE內(nèi)核的瀏覽器中運行良好,但是用火狐就是不行,好像是火狐中根本就不支持onPropertyChange屬性,要用oninput并添加addeventlistener,在網(wǎng)上找了一下看到了一下的代碼,是通過setInterval去定時檢查輸入框中的數(shù)據(jù)長度,當為指定的值的時候就改變光標位置:

<html>
<script>
var insObj=new Array();
var timer=null;
function $(id){return document.getElementById(id)};
/*
function changeInspector(id){
insObj[id]=""+$(id).value;
timer=setInterval("inspector('"+id+"')",100);
}
function inspector(sid){
if($(sid).value!=insObj[sid]){
alert("property changed");
insObj[sid]=$(sid).value;
}
}
*/
function changeInspector(id){
//insObj[id]=""+$(id).value.length;
timer=setInterval("inspector('"+id+"')",100);
}
function inspector(sid){
if($(sid).value.length==3){
?? $('mm2').focus();
?? //insObj[sid]=$(sid).value;
}
}
function doinspector(){
changeInspector("mm");
changeInspector("mm2");
}
</script>
<body οnlοad="doinspector()">
<input type="text" id="mm" value=""></input>
<input type="text" id="mm2" value=""></input>
<input type="button" οnclick="document.getElementById('mm').value='aa'" value="改變值"></input>
</body></html>

這樣是可以實現(xiàn)要求的,但是問題出來了,就是你輸入長度為3的數(shù)據(jù)的時候光標到達下一個框,這時候你要想修改剛才的內(nèi)容換句話說要把光標重新放回去就不可能了,因為每100毫秒就檢查一次只要是3就改變光標位置嘛,所以這樣使用起來會很不方便,不過這種想法還是可以的。

以下是兼容的代碼(火狐中使用oninput):

<div id="msg"></div>
<input type="text" id='txt' value="" />
<script>
//當狀態(tài)改變的時候執(zhí)行的函數(shù)
function handle()
{
//alert('asdf');
document.getElementById('msg').innerHTML='輸入的文字長度為:'+document.getElementById('txt').value.length;
}
//firefox下檢測狀態(tài)改變只能用oninput,且需要用addEventListener來注冊事件。
if(/msie/i.test(navigator.userAgent))??? //ie瀏覽器
{
document.getElementById('txt').onpropertychange=handle
}
else
{//非ie瀏覽器,比如Firefox
document.getElementById('txt').addEventListener("input",handle,false);
}
</script>

以上代碼就可以實現(xiàn)兼容了(PS:火狐的代碼檢查還真是嚴格,剛開始沒寫 input 的type在IE可以在火狐就是不可以后來加上就可以了)

不過在調試的時候還是浪費了不少的時間,因為在IE里加載頁面后就顯示:輸入的內(nèi)容是0。但是在火狐里死活是不顯示的只有輸入了內(nèi)容之后才顯示,一開始我以為又有不兼容問題所以就調了半天最后沒有辦法了我就試試輸入了數(shù)據(jù)結果可以,狂暈!!現(xiàn)在想想是因為剛開始加載頁面的時候是沒有事件產(chǎn)生的所以 火狐一向“嚴謹”的作風就不會調用handle了,但是IE不叫寬松就加載了handle函數(shù),當然也許是因為兩家瀏覽器對addEventListener事件的理解不同。

在這里要說一下的是在<input>中可以使用onPropertyChange 在同時也可以使用 oninput這個現(xiàn)象很好,這樣就可以傻瓜式的實現(xiàn)瀏覽器的“兼容了”(直接寫兩個事件就好)。寫一個的話就只有用onload了,但是我還不知道怎么實現(xiàn)。。。

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結

以上是生活随笔為你收集整理的使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。