大家先看看我这个,代码好不好看不用管了,基本上实现了这些功能。 就是一个缺点,在中间插入一个数字以后,光标会自动跑到末尾,我想解决这个。 <input style="text-align:right" name="money" type="text" maxlength="18" size="20" onkeydown="if(event.keyCode>47 && event.keyCode<58 && this.value.length<18 && getCaretPos(this)==1) tax1(this);" onkeyup="if(event.keyCode==46 || event.keyCode==8 || (event.keyCode>47 && getCaretPos(this)==0)) taxInsert(this);getTax(this,document.all.tax);" value="2,100,000" /><br> <input style="text-align:right" name="tax" type="text" maxlength="18" value="105,000"> <script> function getCaretPos(obj){ var workRange=document.selection.createRange(); var allRange=obj.createTextRange(); workRange.setEndPoint('StartToStart',allRange); len=workRange.text.length; if (len >= obj.value.length) return 1; else return 0; } function taxInsert(obj1){ var m = obj1.value; m = m.replace(/,/g, ''); if (m == '') {obj1.value = '';} else{ if (!isNaN(m)){ m = String(Number(m)); obj1.value = commaInsert(m); setCare(obj1); } } }
function tax1(obj1){ var m = obj1.value; m = m.replace(/,/g, ''); if (m == '') {obj1.value = '';} else{ if (!isNaN(m)){ m = String(Number(m)); obj1.value = comma1(m); } } }
function getTax(obj1,obj2){ var m = obj1.value; m = m.replace(/,/g, ''); if (m == '') {obj2.value = '';} else{ if (!isNaN(m)){ m = String(Number(m)); obj2.value = commaInsert(Math.floor(m*0.05)); } } }
function comma1(value){ var str =String(value).replace(/,/g, ''); if (str=='NaN') return ''; str = str.replace('-',''); str = str.replace(/,/g, ''); if(!check(str)) return str; var yen =''; for(i=0;i<str.length;i++){ if(i && !((str.length-i+1) % 3)) yen+=','; yen+=str.charAt(i); } return yen; } function commaInsert(value){ var str =String(value).replace(/,/g, ''); if (str=='NaN') return ''; str = str.replace('-',''); str = str.replace(/,/g, ''); if(!check(str)) return str; var yen =''; for(i=0;i<str.length;i++){ if(i && !((str.length-i) % 3)) yen+=','; yen+=str.charAt(i); } return yen; } function check(value){ if (isNaN(value)) return false; var a,b; a = value.toString(); b = a.indexOf('.'); if(b!=-1){ return false;} return true; } </script>
setCare(obj1);去掉,是我正在修改中的东西。
写的乱糟糟,基本实现了。就是应付不了拷贝过来的数字。如果拷贝了一个很长的没有逗号的数字,要在中间插入数字,光标位置会出错。另外,不能全选之后删除了。我脑袋已经大了,有高手帮忙没有。 <input style="text-align:right;font:20" name="money" type="text" size="100" onkeydown="tmpStr=this.value;if(getPos(this)==-1 && event.keyCode>47 && event.keyCode<58) {tax1(this);};if(po==-1 && event.keyCode==8){tax3(this);}" onkeyup="if( (event.keyCode==8 && po!=-1) || (event.keyCode>47 && po!=-1)) {taxInsert(this,1)};if(event.keyCode==46) {taxInsert(this,0);}getTax(this,document.all.tax);"><br> <input style="text-align:right;font:20" name="tax" type="text" size="100"" value="105,000"> <script> var po; var tmpStr=''; function getPos(obj){ var workRange=document.selection.createRange(); obj.select(); var allRange=document.selection.createRange(); workRange.setEndPoint("StartToStart",allRange); var len=workRange.text.length; workRange.collapse(false); workRange.select(); if (len >= obj.value.length) { po=-1; return -1;} else {po=len; return len;} }function setPos(obj,num){ var rng=obj.createTextRange() rng.moveStart("character",Number(num)) rng.collapse(); rng.select(); } function taxInsert(obj1,flag){ var m = obj1.value; m = m.replace(/,/g, ''); if (m == '') {obj1.value = '';} else{ if (!isNaN(m)){ m = String(Number(m)); obj1.value = commaInsert(m); if (po !=-1){ if (flag==1) setPos(obj1,po+obj1.value.length-tmpStr.length); else setPos(obj1,po+obj1.value.length-tmpStr.length+1); } } } } function tax3(obj1){ var m = obj1.value; m = m.replace(/,/g, ''); if (m == '') {obj1.value = '';} else{ if (!isNaN(m)){ m = String(Number(m)); obj1.value = comma3(m); } } } function comma3(value){ var str =String(value).replace(/,/g, ''); if (str=='NaN') return ''; str = str.replace('-',''); str = str.replace(/,/g, ''); if(!check(str)) return str; var yen =''; for(i=0;i<str.length;i++){ if(i && !((str.length-i-1) % 3) && i != str.length-1) yen+=','; yen+=str.charAt(i); } return yen; } function tax1(obj1){ var m = obj1.value; m = m.replace(/,/g, ''); if (m == '') {obj1.value = '';} else{ if (!isNaN(m)){ m = String(Number(m)); obj1.value = comma1(m); } } }
function getTax(obj1,obj2){ var m = obj1.value; m = m.replace(/,/g, ''); if (m == '') {obj2.value = '';} else{ if (!isNaN(m)){ m = String(Number(m)); obj2.value = commaInsert(Math.floor(m*0.05)); } } }
function comma1(value){ var str =String(value).replace(/,/g, ''); if (str=='NaN') return ''; str = str.replace('-',''); str = str.replace(/,/g, ''); if(!check(str)) return str; var yen =''; for(i=0;i<str.length;i++){ if(i && !((str.length-i+1) % 3)) yen+=','; yen+=str.charAt(i); } return yen; } function commaInsert(value){ var str =String(value).replace(/,/g, ''); if (str=='NaN') return ''; str = str.replace('-',''); str = str.replace(/,/g, ''); if(!check(str)) return str; var yen =''; for(i=0;i<str.length;i++){ if(i && !((str.length-i) % 3)) yen+=','; yen+=str.charAt(i); } return yen; } function check(value){ if (isNaN(value)) return false; var a,b; a = value.toString(); b = a.indexOf('.'); if(b!=-1){ return false;} return true; } </script>
你要是闲烦的话干脆就不让他拷贝,加onpaste="return false"就可以了
function oPaste(e) { event.returnValue=regInput(e, /^[\-]?\d*\.?\d{0,8}$/, window.clipboardData.getData('Text'));
} function oDrop(e) { event.returnValue=regInput(e, /^[\-]?\d*\.?\d{0,8}$/, event.dataTransfer.getData('Text')); } onPaste="oPaste(this);" onDrop="oDrop(this);"
<HTML>
<HEAD>
<TITLE> 数字输入控制,给数字加上千分符 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<style>
.inputRight {
text-align: right;
border: 1px #666666 dashed;
font-size: 9pt;
color: #993366;
height: 18px;
ime-mode : disabled;
}
</style>
<SCRIPT LANGUAGE="JavaScript">
/*
这些功能建议通过HTC来实现
*/
////////////
//数字输入控制
function FormatInput(dotlen)
{
var myEle=event.srcElement;
var myValue=String.fromCharCode(event.keyCode);
if (myEle.readOnly)
{
return;
}
switch(dotlen)
{
//原正则表达式(可以输入负数):/^[\-]?\d*\.?\d{0,0}$/
case 0:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,0}$/, myValue); break;}
case 1:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,1}$/, myValue); break;}
case 2:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,2}$/, myValue); break;}
case 3:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,3}$/, myValue); break;}
case 4:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,4}$/, myValue); break;}
case 5:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,5}$/, myValue); break;}
case 6:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,6}$/, myValue); break;}
case 7:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,7}$/, myValue); break;}
case 8:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,8}$/, myValue); break;}
default :{event.returnValue = regInput(myEle, /^\d*\.?\d{0,0}$/, myValue); break;}
}
}
function regInput(obj, reg, inputStr)
{
var docSel = document.selection.createRange()
if (docSel.parentElement().tagName != "INPUT") return false
oSel = docSel.duplicate()
oSel.text = ""
var srcRange = obj.createTextRange()
oSel.setEndPoint("StartToStart", srcRange)
var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length)
return reg.test(str)
}
//给数字加上千分符 by yuanzy
function splitNumber(eValue)
{
var intPart = "";
var decPart = "";
if (eValue.indexOf(",")>=0)
{
eValue=eValue.replace(/,/g,"");
}
if (eValue.indexOf(".")>=0)
{
intPart=eValue.split(".")[0];
decPart=eValue.split(".")[1];
}
else
{
intPart = eValue;
}
var num = intPart+"";
var re=/(-?\d+)(\d{3})/
while(re.test(num)){
num=num.replace(re,"$1,$2")
}
if (eValue.indexOf(".")>=0)
{
eValue=num + "." + decPart;
}
else
{
eValue=num ;
}
return eValue;
}function oFocus()
{
if (event.srcElement.readOnly) return;
event.srcElement.value=event.srcElement.value.replace(/,/g,"");
}function oBlur()
{
if (event.srcElement.value=="-")
{
event.srcElement.value="";
}
event.srcElement.value = splitNumber(event.srcElement.value);
}</SCRIPT>
</HEAD><BODY><input class="inputRight" type='text' onfocus="oFocus();" onblur="oBlur();" onKeypress="FormatInput(2);" >
</BODY>
</HTML>
<input name=haha onkeydown="show(this)" onkeyup=show2(this)>
<script language=javascript>
function show(obj)
{
//alert(event.keyCode);
if(((event.keyCode<48)||(event.keyCode>57))&&(event.keyCode!=8))
{
event.returnValue=false;
}
}
function show2(obj)
{
//在这里分数字,这样你的问题都解决了
alert(obj.value);
}
</script>
就是一个缺点,在中间插入一个数字以后,光标会自动跑到末尾,我想解决这个。
<input style="text-align:right" name="money" type="text" maxlength="18" size="20" onkeydown="if(event.keyCode>47 && event.keyCode<58 && this.value.length<18 && getCaretPos(this)==1) tax1(this);" onkeyup="if(event.keyCode==46 || event.keyCode==8 || (event.keyCode>47 && getCaretPos(this)==0)) taxInsert(this);getTax(this,document.all.tax);" value="2,100,000" /><br>
<input style="text-align:right" name="tax" type="text" maxlength="18" value="105,000">
<script>
function getCaretPos(obj){
var workRange=document.selection.createRange();
var allRange=obj.createTextRange();
workRange.setEndPoint('StartToStart',allRange);
len=workRange.text.length;
if (len >= obj.value.length)
return 1;
else
return 0;
}
function taxInsert(obj1){
var m = obj1.value;
m = m.replace(/,/g, '');
if (m == '') {obj1.value = '';}
else{
if (!isNaN(m)){
m = String(Number(m));
obj1.value = commaInsert(m);
setCare(obj1);
}
}
}
function tax1(obj1){
var m = obj1.value;
m = m.replace(/,/g, '');
if (m == '') {obj1.value = '';}
else{
if (!isNaN(m)){
m = String(Number(m));
obj1.value = comma1(m);
}
}
}
function getTax(obj1,obj2){
var m = obj1.value;
m = m.replace(/,/g, '');
if (m == '') {obj2.value = '';}
else{
if (!isNaN(m)){
m = String(Number(m));
obj2.value = commaInsert(Math.floor(m*0.05));
}
}
}
function comma1(value){
var str =String(value).replace(/,/g, '');
if (str=='NaN') return '';
str = str.replace('-','');
str = str.replace(/,/g, '');
if(!check(str)) return str;
var yen ='';
for(i=0;i<str.length;i++){
if(i && !((str.length-i+1) % 3)) yen+=',';
yen+=str.charAt(i);
}
return yen;
}
function commaInsert(value){
var str =String(value).replace(/,/g, '');
if (str=='NaN') return '';
str = str.replace('-','');
str = str.replace(/,/g, '');
if(!check(str)) return str;
var yen ='';
for(i=0;i<str.length;i++){
if(i && !((str.length-i) % 3)) yen+=',';
yen+=str.charAt(i);
}
return yen;
}
function check(value){
if (isNaN(value)) return false;
var a,b;
a = value.toString();
b = a.indexOf('.');
if(b!=-1){
return false;}
return true;
}
</script>
<input style="text-align:right;font:20" name="money" type="text" size="100"
onkeydown="tmpStr=this.value;if(getPos(this)==-1 && event.keyCode>47 && event.keyCode<58) {tax1(this);};if(po==-1 && event.keyCode==8){tax3(this);}"
onkeyup="if( (event.keyCode==8 && po!=-1) || (event.keyCode>47 && po!=-1)) {taxInsert(this,1)};if(event.keyCode==46) {taxInsert(this,0);}getTax(this,document.all.tax);"><br>
<input style="text-align:right;font:20" name="tax" type="text" size="100"" value="105,000">
<script>
var po;
var tmpStr='';
function getPos(obj){
var workRange=document.selection.createRange();
obj.select();
var allRange=document.selection.createRange();
workRange.setEndPoint("StartToStart",allRange);
var len=workRange.text.length;
workRange.collapse(false);
workRange.select();
if (len >= obj.value.length) {
po=-1;
return -1;}
else
{po=len;
return len;}
}function setPos(obj,num){
var rng=obj.createTextRange()
rng.moveStart("character",Number(num))
rng.collapse();
rng.select();
}
function taxInsert(obj1,flag){
var m = obj1.value;
m = m.replace(/,/g, '');
if (m == '') {obj1.value = '';}
else{
if (!isNaN(m)){
m = String(Number(m));
obj1.value = commaInsert(m);
if (po !=-1){
if (flag==1)
setPos(obj1,po+obj1.value.length-tmpStr.length);
else
setPos(obj1,po+obj1.value.length-tmpStr.length+1);
}
}
}
}
function tax3(obj1){
var m = obj1.value;
m = m.replace(/,/g, '');
if (m == '') {obj1.value = '';}
else{
if (!isNaN(m)){
m = String(Number(m));
obj1.value = comma3(m);
}
}
}
function comma3(value){
var str =String(value).replace(/,/g, '');
if (str=='NaN') return '';
str = str.replace('-','');
str = str.replace(/,/g, '');
if(!check(str)) return str;
var yen ='';
for(i=0;i<str.length;i++){
if(i && !((str.length-i-1) % 3) && i != str.length-1) yen+=',';
yen+=str.charAt(i);
}
return yen;
}
function tax1(obj1){
var m = obj1.value;
m = m.replace(/,/g, '');
if (m == '') {obj1.value = '';}
else{
if (!isNaN(m)){
m = String(Number(m));
obj1.value = comma1(m);
}
}
}
function getTax(obj1,obj2){
var m = obj1.value;
m = m.replace(/,/g, '');
if (m == '') {obj2.value = '';}
else{
if (!isNaN(m)){
m = String(Number(m));
obj2.value = commaInsert(Math.floor(m*0.05));
}
}
}
function comma1(value){
var str =String(value).replace(/,/g, '');
if (str=='NaN') return '';
str = str.replace('-','');
str = str.replace(/,/g, '');
if(!check(str)) return str;
var yen ='';
for(i=0;i<str.length;i++){
if(i && !((str.length-i+1) % 3)) yen+=',';
yen+=str.charAt(i);
}
return yen;
}
function commaInsert(value){
var str =String(value).replace(/,/g, '');
if (str=='NaN') return '';
str = str.replace('-','');
str = str.replace(/,/g, '');
if(!check(str)) return str;
var yen ='';
for(i=0;i<str.length;i++){
if(i && !((str.length-i) % 3)) yen+=',';
yen+=str.charAt(i);
}
return yen;
}
function check(value){
if (isNaN(value)) return false;
var a,b;
a = value.toString();
b = a.indexOf('.');
if(b!=-1){
return false;}
return true;
}
</script>
{
event.returnValue=regInput(e, /^[\-]?\d*\.?\d{0,8}$/, window.clipboardData.getData('Text'));
}
function oDrop(e)
{
event.returnValue=regInput(e, /^[\-]?\d*\.?\d{0,8}$/, event.dataTransfer.getData('Text'));
} onPaste="oPaste(this);" onDrop="oDrop(this);"