2012-03-29 8 views
0

入力フィールドで値の置換を実行しようとしています。ほとんど正常に動作しています。value replaceは入力の最後に値を正しく追加しません。

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

のjQuery::私はハードすべての機能

を置くことから保つためにいくつかの値をコード化している問題は、私が唯一それが一箇所

HTMLに追加したい入力の末尾に付加価値を与えています

$('#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

あなたは現在03に取り込まれた入力の月部分に3を追加した場合、それは置き換えられ、3で正しくBUですそれはまた、年末に3を追加します。年の値が2012年

残るべき時に、最終的な値は

3/15/2012 

ない

3/15/2

でなければなりません20123、今年作る編集:

このコードは同じになります問題:

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

としてこの

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

なぜvalの中に関数を入れるのですか?スコープとエンクロージャの問題が発生する可能性があります。 – kappa

+0

コードとフィドルが機能を持たないように更新しました。まだ同じ問題。 –

答えて

1

最後に追加された余分な文字が入力フィールド自体によって追加されます。 keypressイベントは入力によっても処理されます。これは普通のことを行い、値に文字を追加します。

イベントハンドラにe.preventDefault();を入力するだけで、入力がイベントを取得しないようにすることができます。


また、あなたが維持したい文字列の部分を取得するためにsubstrを使用して、文字列内の文字を入れてreplaceを使用しない:文字列とは、例えばある場合

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

05/05/2012とし、その日を4に置き換えようとすると、代わりに最初のoccuraceが置き換えられ、05/4/2012の代わりに4/05/2012が得られます。

+0

回答ありがとうございます。また、置換とサブストリングについてのボーナス情報もありがとうございます –

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

+0

私は最後の数字にも置き換わると思います。日付は3/15/2012の代わりに3/15/2013になります –

関連する問題