2012-02-20 1 views
1

У меня есть плагин. Вы видите демо в: http://jsfiddle.net/nangvabien/8Uuvb/Как разрешить только один десятичный разделитель в texbox?

Если десятичный разделитель = "" или "" данные, вводимые пользователем в текстовом поле: ... ,,,, 1000000 5 -> Формат: 1.000.000,5 или 12300000 ,, .. 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

Hello Valky. Ваш код является управляющим входом в текстовое поле, но я не знаю, как добавить мой код (здесь мой код http://jsfiddle.net/nangvabien/8Uuvb/) для плагина FormatNumber. – minh

+0

Извините, я не понимаю, что вы действительно хотите сделать, и почему вы этого хотите, и что это может сделать в конце концов. Мое сообщение отвечает на ваш вопрос в заголовке. Это выражение /^([1-9][0-9]*[,\.]?\d{0,3})$/ допускает только один десятичный разделитель и 3 десятичных после. – Valky

0

Вот мое решение для десятичного текстового поля с fiddle. Он работает с отрицательными номерами и копирует/вставляет.

$('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); 
}