2012-03-29 526 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