2012-03-29 142 views
0

我正在尝试在输入字段中进行值替换。它几乎正常工作。问题是,它增加值输入结束时,我只想把它添加到一个位置值替换将值错误地添加到输入的末尾

HTML:

<input id="boom" value="03/15/0212" />​ 

Jquery的:我已经硬编码一些值从将所有功能

保持
$('#boom').on('keypress', function (e) 
{ 
    var crs = this.selectionStart; 
    var from; 
    var to; 
    var sub; 
    _dateSection = 'month'; 
    var currentObj = this; 
    var currentVal = $(this).val(); 
    var c = String.fromCharCode(e.which); 
    var stringSplit = currentVal.split('/'); 
    switch (_dateSection) { 
     case 'month': 
      _currentDateValue = stringSplit[0]; 
      from = 0; 
      to = 2; 
      sub = currentVal.substring(from, to); 
      break; 
     case 'day': 
      _currentDateValue = stringSplit[1]; 
      from = 3; 
      to = 6; 
      sub = currentVal.substring(from, to); 
      break; 
     case 'year': 
      _currentDateValue = stringSplit[2]; 
      from = 6; 
      to = 10; 
      sub = currentVal.substring(from, to); 
      break; 
    }; 
    var check = false; 
    if (!check) { 
     $(currentObj).val(function (index, value) 
     { 
      return value.replace(sub, c); 
     }); 
    } 
}); 

JsFiddle

如果你加3到当前填充了03它取代了输入的月份部分是正确地搭配3,BU这也增加了3到年底。这使得今年以来,20123当打之年值应保持2012年

的最终值应是

3/15/2012 

3/15/2

编辑:

这个代码给出了同样的问题:

$(currentObj).val(currentVal.replace(sub, c)); 

为做到这一点

var replaceValue = currentVal.replace(sub, c) 
$(currentObj).val(replaceValue); 
+0

为什么把一个函数放入val中?这可能会引入范围和外壳问题 – kappa 2012-03-29 06:33:45

+0

我更新了代码和提琴里面没有功能。仍是同样的问题。 – 2012-03-29 07:11:52

回答

1

被添加到末尾的额外字符由输入字段本身添加。 keypress事件也由输入来处理,它执行正常的事情并将该字符添加到值中。

只需在您的事件处理程序中放入e.preventDefault();以保持输入无法获取事件。


此外,不要使用replace把字符字符串中,使用substr获得您想要保留的字符串部分:

value = value.substr(0, from) + c + value.substr(to, c); 

如果字符串,例如05/05/2012并且您尝试用4替换当天,它将替代第一个使用者,而您将获得4/05/2012而不是05/4/2012

+0

感谢您的答案,也感谢关于替换和子字符串的奖金信息 – 2012-03-29 07:49:50

0

,这是为我工作: -

$('#boom').on('keyup', function (e) 
      { 
       var crs = this.selectionStart; 
       var from; 
       var to; 
       var sub; 
       _dateSection = 'month'; 
       var currentObj = this; 
       var currentVal = $(this).val(); 
       var c = String.fromCharCode(e.which); 
       var stringSplit = currentVal.split('/'); 
       switch (_dateSection) { 
        case 'month': 
          _currentDateValue = stringSplit[0]; 
          sub = _currentDateValue; 
         c=Number(sub)+Number(c); 
         break; 
        case 'day': 
         _currentDateValue = stringSplit[1]; 
         from = 3; 
         to = 6; 
         sub = currentVal.substring(from, to); 
         break; 
        case 'year': 
         _currentDateValue = stringSplit[2]; 
         from = 6; 
         to = 10; 
         sub = currentVal.substring(from, to); 
         break; 
       }; 
       var check = false; 
       if (!check) { 
        $(currentObj).val(function (index, value) 
        { 

         value=value.substring(from,value.length-1); 
         return value.replace(sub, c); 
        }); 
       } 
     }); 
+0

检查编辑的答案。 – Pranav 2012-03-29 07:22:30

+0

我认为这也取代了最后一个数字。看起来,日期变为2013年3月15日而不是2012年3月15日 – 2012-03-29 07:36:51