js怎么替换字符串光标后面的字符

小强VS旺财 2009-08-31 07:25:04
例如文本框中的内容为2009/08/31 光标在2前面的时候输入20100901就把2009/08/31替换为2010/09/01,"/"不替换
...全文
304 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小强VS旺财 2009-09-01
  • 打赏
  • 举报
回复
文本框
<input name="txtOverTime:Text1" id="txtOverTime_Text1" maxlength="19" value="2009-09-01 19:10:32" onpaste="checkPaste()" onkeypress="keypress(this)" onkeydown="keydown(this)" onmousemove="checkPaste()" type="text" onDrag="checkPaste()" oncut="checkPaste()" />
osobo 2009-09-01
  • 打赏
  • 举报
回复
复杂啊。。
小强VS旺财 2009-09-01
  • 打赏
  • 举报
回复
谢谢各位的回答sunxing007的回答启发了我 最后找到了终极解决方案贴出来大家分享下
脚本
<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 || cursorPos == 17)
{
movenext(src,cursorPos,-1);
cursorPos-=1;
}
else
movenext(src,cursorPos,0);
var range = setSelect(src,cursorPos-1);
range.text = "0";
movenext(src,cursorPos,-1);
e.returnValue = false;
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 || cursorPos == 16)
{
movenext(src,cursorPos,1);
cursorPos += 1;
}
var num = String.fromCharCode(code);
if(checkInput(src,num,cursorPos))
{
var range = setSelect(src,cursorPos);
range.text = num;
if(cursorPos == 3 || cursorPos == 6 || cursorPos == 9 || cursorPos == 12 || cursorPos == 15)
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);

switch(pos)
{
case 0:
if(num != 1 && num != 2)
return false;
break;
case 5:
var char6 = val.charAt(6);
if(num > 1 || num == 1 && char6 > 2)
return false;
break;
case 6:
if(val.charAt(5) == "1" && num > 2 || val.charAt(5) == "0" && num == 0)
return false;
break;
case 8:
var char9 = val.charAt(9);
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(num > 3 || num == 3 && char9 > 1)
return false;
break;
case 4:
case 6:
case 9:
case 11:
if(num > 3 || num == 3&&char9 > 0)
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;
break;
case 4:
case 6:
case 9:
case 11:
if(char8 == 0 && num == 0 || char8 == 3 && num != 0)
return false;
break;
case 2:
if(char8 == 0 && num == 0)
return false;
else if(char8 == 2 && (year%4 != 0 || (year%100 == 0 && year%400 != 0)) && num > 8)
return false;
break;
}
break;
case 11:
if(num > 2 || num == 2 && val.charAt(12) > 3)
return false;
break;
case 12:
if(parseInt(val.charAt(11) + num)>23)
return false;
break;
case 14:
case 17:
if(num > 5)
return false;
break;
}
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)
{
window.event.returnValue = false;
return false;
}
return true;
}

function checkPaste()
{
window.event.returnValue=false;
}

</script>

文本框
<input name="txtOverTime:Text1" id="txtOverTime_Text1" maxlength="21" value="2009-09-01" onpaste="checkPaste()" onkeypress="keypress(this)" onkeydown="keydown(this)" onmousemove="checkPaste()" type="text" onDrag="checkPaste()" oncut="checkPaste()" />
sunxing007 2009-08-31
  • 打赏
  • 举报
回复
上面的例子有一个地方写错了。

<input type="text" id="a" />
<input type="button" id="b" value="change" />
<script>
document.getElementById('b').onclick = function(){
var obj = document.getElementById('a');
var text = obj.value;
obj.focus();
var s=document.selection.createRange();
s.setEndPoint("StartToStart",obj.createTextRange());
//光标前的字符串长度
var lengthBefore = s.text.length;
//光标前的字符串
var textBefore = text.substring(0,lengthBefore);
//大写
var upperCase = textBefore.toUpperCase();
obj.value = upperCase + text.substring(lengthBefore);
this.focus();
};
</script>
sunxing007 2009-08-31
  • 打赏
  • 举报
回复
如果要获取,操作光标的位置,需要认识一个东西,textRange.我有一片文章你可以看看。
http://blog.csdn.net/sunxing007/archive/2009/04/17/4086952.aspx
针对你的问题,我写了个比较简单的例子,把光标前的字符串大写,给你参考。

<input type="text" id="a" />
<input type="button" id="b" value="change" />
<script>
document.getElementById('b').onclick = function(){
var obj = document.getElementById('a');
var text = obj.value;
obj.focus();
var s=document.selection.createRange();
s.setEndPoint("StartToStart",obj.createTextRange());
//光标前的字符串长度
var lengthBefore = s.text.length;
//光标前的字符串
var textBefore = text.substring(0,lengthBefore);
//大写
var upperCase = textBefore.toUpperCase();
obj.value = upperCase + text.substring(5);
this.focus();
};
</script>
xinyung 2009-08-31
  • 打赏
  • 举报
回复
怎么判断光标在2之前呢?一般是光标离开的时候去替换,
<input type="text" onblur="this.value=this.value.replace(/^(\d{4}\/?)(\d{2}\/?)(\d{2})$/, '$1/$2/$3')">
huadis 2009-08-31
  • 打赏
  • 举报
回复
就按楼上的吧,前提是你输入的字符串一定要是20100901这种形式
bingsha1976 2009-08-31
  • 打赏
  • 举报
回复
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
function f1(){
if (event.keyCode==13) {
var d=document.getElementById("date1").value;
document.getElementById("date1").value=d.substring(0,4)+"/"+d.substring(4,6)+"/"+d.substring(6,8);
}
}
</script>
</head>

<body>
<input type="text" name="textfield" id="date1" onkeydown="f1()" />
</body>
</html>


参照这个看看有没有帮助

87,903

社区成员

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

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