高分问个关于文本框输入格式的问题

billy36 2004-12-01 05:17:51
一个文本筐 type='text' 的这种有没有可能让这个文本框里有个小数点可以设定好格式能实现键盘输123根据设定好的格式数据变为1.23之类的,就是减少了输入时的那一个小数点,由于数据比较多所以速度会快很多。

记得FOXPRO里有这个功能就是那个格式,不知在网页上能不能也可以这样。感谢。
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
梅雪香 2004-12-01
  • 打赏
  • 举报
回复
用下面这种方法试试
<html>
<head>
<title>无标题文档</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
function keydown(src){
var e=window.event;
var code=e.keyCode;
var cursorPos=getPos(src);
if(code==8){ //退格
if(cursorPos==5 || cursorPos==8|| cursorPos==11 || cursorPos==14){
movenext(src,cursorPos,-1);
cursorPos-=1;
}else movenext(src,cursorPos,0);
//alert();
var range=setSelect(src,cursorPos-1);
range.text="0";
movenext(src,cursorPos,-1);
e.returnValue=false;
//src.focus();
return false;
}else if(code==46) e.returnValue=false;
}
function keypress(src){
var e=window.event;
var code=e.keyCode;
var cursorPos=getPos(src);
if(!keyPressInt()) return false;
if(cursorPos==4 || cursorPos==7|| cursorPos==10 || cursorPos==13){
movenext(src,cursorPos,1);
cursorPos += 1;
}
var num = String.fromCharCode(code);
//alert(num);
if(checkInput(src,num,cursorPos)){
var range=setSelect(src,cursorPos);
range.text=num;
if(cursorPos==3 || cursorPos==6|| cursorPos==9 || cursorPos==12)
movenext(src,cursorPos,2);
else movenext(src,cursorPos,1);
}
e.returnValue=false;
return false;
}
function checkInput(src,num,pos){
var val=src.value;
var year=parseInt(val.substring(0,4),10);
var month=parseInt(val.substring(5,7),10);
output.value+="num="+num+" pos="+pos+" val="+val + " year="+year+" month="+month;
output.value+="\r\n";
switch(pos){
case 0: if(num!=1 && num!=2) return false; break;
case 5: if(num>1) return false;break;
case 6: if(val.charAt(5)=="1" && num>2 || val.charAt(5)=="0" && num==0)
return false;break;
case 8: switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
case 4: case 6: case 9: case 11:
if(num>3) return false;break;
case 2: if(num>2) return false;break;
}break;
case 9: var char8=val.charAt(8); switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(char8==0 && num==0 || char8==3 && num>1) return false;
case 4: case 6: case 9: case 11:
if(char8==0 && num==0 || char8==3 && num!=0) return false;
case 2: if(char8==0 && num==0) return false;
else if(char8==2 && !(year%4==0 && year %400==0) && num>8) return false;
}break;
case 11: if(num>2) return false;break;
case 12: if(parseInt(val.charAt(11)+num)>23) return false;break;
case 14: if(num>5) return false;break;
}
output.value+="return true;"; output.value+="\r\n";
return true;
}
function setSelect(src,pos){
var range = src.createTextRange();
range.moveStart('character',pos);
range.moveEnd('character',pos-src.value.length+1);
range.select();
return range;
}
function getPos(obj){
var ml=obj.value.length;
var pos=0;
var rng=document.selection.createRange();
rng.moveEnd("character",ml);
try{
pos=ml-rng.text.length
}catch(e){}
return pos;
}
function movenext(src,pos,flag)
{
var range =src.createTextRange();
range.moveStart("character",pos+flag);
range.collapse(true);
range.select();
}
function keyPressInt(){
var e=window.event;
code=e.keyCode;
if(code >=48 && code <=57) return true;
else {window.event.returnValue=false;return false;}
}
function checkPaste(){
window.event.returnValue=false;
}
function initDate(){
var date=new Date();
var year=date.getFullYear();
var month=date.getMonth()+1;
var day=date.getDate();
var hour=date.getHours();
var minu=date.getMinutes();
month=month<10?"0"+month:month;
day=day<10?"0"+day:day;
hour=hour<10?"0"+hour:hour;
minu=minu<10?"0"+minu:minu;
document.all.dateinput.value=year+"-"+month+"-"+day+" "+hour+":"+minu;
movenext(document.all.dateinput,0,0);
}

</script>
</head>

<body onload="initDate()">
<p align=center>
<input name="dateinput" value="0000-00-00 00:00" onkeydown="keydown(this)" size="16" maxlength="16" type="text" onFocus="" onkeypress="keypress(this)" onpaste="checkPaste()" onDrag="checkPaste()" oncut="checkPaste()" onmousemove="checkPaste()">
</p>
<p><input type="button" value="clear" onclick="javascript:output.innerText='';">
<textarea id="output" width="800" height="600" rows="30" cols="100"></textarea>
</P>
<script language="JavaScript">
<!--
dateinput.focus();
//-->
</script>
</body>
</html>
meizz 2004-12-01
  • 打赏
  • 举报
回复
To: manyou(他山之石) 思路不错, 但是有BUG
<input onblur="this.value = parseFloat(this.value)/100" value="0.0012">
全息宇宙 2004-12-01
  • 打赏
  • 举报
回复
<input onblur="this.value = parseFloat(this.value)/100">
全息宇宙 2004-12-01
  • 打赏
  • 举报
回复
<input onfocusout="this.value = parseFloat(this.value)/100">
lingyun2111 2004-12-01
  • 打赏
  • 举报
回复
试试楼上兄弟的做法
meizz 2004-12-01
  • 打赏
  • 举报
回复
做了个小把戏, 不知能否满足楼主

<input onblur="mm(this)">
<SCRIPT LANGUAGE="JavaScript">
function mm(e)
{
var s = e.value.replace(/^\s*|\s*$/g, "");
if(s=="") return;
if(isNaN(s)){alert("输入的不是数字!"); e.select();}
if(s.indexOf(".")>-1) return;
e.value = s.replace(/^(\d*)(\d{2})$/, "$1.$2")
}
</SCRIPT>
billy36 2004-12-01
  • 打赏
  • 举报
回复
但是有没有更为形象一点的就是文本框内有一个固定的小数点,输入数字时到了设定的位数就自动跳过去


呵呵有点吹毛求疵了
billy36 2004-12-01
  • 打赏
  • 举报
回复
试了以上各位的办法可以,基本上能满足需求

to meizz(梅花雪) 我基本上最多到小数点2位,基本上没有这个问题吧.

我想加上长度的验证再来判断用那种小数点(/100或/10等等)应该就可以了。

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧