2012-02-20 9 views
1

私はプラグインを持っています。小数点区切り= 場合は "" http://jsfiddle.net/nangvabien/8Uuvb/テクスチャボックスに小数点記号を1つだけ設定する方法は?

か:あなたはでデモを参照してください ""、テキストボックスにユーザ入力:1000000 ,,,, ... 5 - >フォーマット:1.000.000,5、又は1230万,, .. 5 - >フォーマット12,300,000.5

小数点記号のみを入力します。プラグインのFormatNummerを改善してください。

答えて

3

私はあなたを助けるかもしれない何かをやった:あなたはそれがここで働いて見ることができます Live control a float input with a regex mask

$('.numeric_input').live("keyup",function(){inputControl($(this),'int');}); 
$('.float_input').live("keyup",function(){inputControl($(this),'float');}); 

function inputControl(input,format) 
{ 
    var value=input.val(); 
    var values=value.split(""); 
    var update=""; 
    var transition=""; 
    if (format=='int'){ 
     expression=/^([0-9])$/; 
     finalExpression=/^([1-9][0-9]*)$/; 
    } 
    else if (format=='float') 
    { 
     var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/; 
     var finalExpression=/^([1-9][0-9]*[,\.]?\d{0,3})$/; 
    } 
    for(id in values) 
    {   
     if (expression.test(values[id])==true && values[id]!='') 
     { 
      transition+=''+values[id].replace(',','.'); 
      if(finalExpression.test(transition)==true) 
      { 
       update+=''+values[id].replace(',','.'); 
      } 
     } 
    } 
    input.val(update); 
} 

を:ここでhttp://jsfiddle.net/8Uuvb/1/

+0

こんにちは。あなたのコードは、テキストボックスのコントロールの入力ですが、私は自分のコード(ここで私のコードhttp://jsfiddle.net/nangvabien/8Uuvb/)をFormatNumberプラグインに追加する方法を知ることができません。 – minh

+0

申し訳ありませんが、私はあなたが本当にやりたいこと、なぜあなたがそれを望んでいるのか、それが最終的に何をするのか理解していません。私のポストはあなたのタイトル質問に答えます。この式/^([1-9-9)[0-9]*[,\.]?¥d{0,3})$/は小数点以下の桁区切り記号と小数点以下3桁を許可します。 – Valky

0

fiddle 10進テキストフィールドの私の解決策です。それは負の数とコピー/ペーストで動作します。

$('input').bind('paste', function() { 
    var self = $(this); 
    var orig = self.val(); 
    setTimeout(function() { 
     var pasted = getTextDiff(orig, $(self).val()); 
     if(isNaN(Number($(self).val()))) 
      $(self).val($(self).val().replace(pasted, '')); 
     console.log(pasted); 
    }); 
}); 
$("input").keypress(function (event) { 
    var inputCode = event.which; 
    var currentValue = $(this).val(); 
    if (inputCode > 0 && (inputCode < 48 || inputCode > 57)) { 
     if (inputCode == 46) { 
      if (getCursorPosition(this) == 0 && currentValue.charAt(0) == '-') return false; 
      if (currentValue.match(/[.]/)) return false; 
     } 
     else if (inputCode == 45) { 
      if (currentValue.charAt(0) == '-') return false; 
      if (getCursorPosition(this) != 0) return false; 
     } 
     else if (inputCode == 8) return true; 
     else return false; 

    } 
    else if (inputCode > 0 && (inputCode >= 48 && inputCode <= 57)) { 
     if (currentValue.charAt(0) == '-' && getCursorPosition(this) == 0) return false; 
    } 
}); 
function getCursorPosition(element) { 
    if (element.selectionStart) return element.selectionStart; 
    else if (document.selection) 
    { 
     element.focus(); 
     var r = document.selection.createRange(); 
     if (r == null) return 0; 

     var re = element.createTextRange(), 
      rc = re.duplicate(); 
     re.moveToBookmark(r.getBookmark()); 
     rc.setEndPoint('EndToStart', re); 
     return rc.text.length; 
    } 
    return 0; 
} 
function getTextDiff(first, second) { 
    var start = 0; 
    while (start < first.length && first[start] == second[start]) { 
     ++start; 
    } 
    var end = 0; 
    while (first.length - end > start && first[first.length - end - 1] == second[second.length - end - 1]) { 
     ++end; 
    } 
    end = second.length - end; 
    return second.substr(start, end - start); 
} 
関連する問題