2015-06-16 3 views
1

Так что я работаю над формой и имеет поле, где я должен разрешить 5 десятичных знаков после десятичного разделителя. Однако мне также пришлось выполнить эту работу по .focus() и. blur(), и это работает. Но когда я нажимаю elsewere, чтобы иметь значение, отформатированное так, как я хотел в поле ввода, из моих пяти десятичных знаков мои последние 2 удалены. Пример: я ввожу 78676,56569, re возвращает 78.676.565 Как я могу изменить код, чтобы он не удалял мои последние 2 десятичных знака? Вот что у меня есть:Как предотвратить стирание десятичных знаков в JQuery?

function fiveDecimals(event) { 
       var $txtBox = $(this); 
       var key = window.event ? event.keyCode : event.which; 
       if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39) { 
        return true; 
       } else if (key < 44 || key > 57 && event.keyCode != 44) { 
        event.preventDefault(); 
       }else { 
       var len = $txtBox.val().length; 
       var index = $txtBox.val().indexOf(','); 

       if (index > 0 && event.keyCode == 44) { 
       return false; 
       } //prevent if already comma 
       if (index > 0) { 
       var charAfterdot = (len + 1) - index; 
       //allows only 5 decimals 
       if (charAfterdot > 6) { 
        return false; 
       } 
      } 
     } 
        return $txtBox; 
       };  
        var 
      dec_separator = (0.1).toLocaleString().substr(1,1), // Get decimal separator 
      dec_xsanitize = new RegExp('[' + dec_separator + ']', 'g'), // Get thousands separator 
      tho_separator = (1000).toLocaleString().substr(1,1), 
      tho_xcleaner = new RegExp('[' + tho_separator + ']', 'g'); 
     $('#float2') 
      .on("focus", function() 
       { 
       this.value = this.value.replace(tho_xcleaner, ''); 
       }) 
      .on("blur", function() 
       {// Clean thousands separator and change decimal separator 
       var number = parseFloat(this.value.replace(tho_xcleaner, '').replace(dec_xsanitize, '.')); 
        this.value = isNaN(number) ? '0': number.toLocaleString(); 
       }); 

Вот Jsfiddle: http://jsfiddle.net/Daria90/zuxu5tva/

Обратите внимание, что мой десятичные сепаратор установлен в системе DE, так и на английском языке клавиатуры подмигнули вероятно период и KEYCODE составляет 46. шахта была 44.

ответ

0

Все, что вам нужно включить был $(this).val(number); в вашей blur функции

 $('#float2') 
      .on("focus", function() 
       { 
       this.value = this.value.replace(tho_xcleaner, ''); 
       }) 
      .on("blur", function() 
       {// Clean thousands separator and change decimal separator 
       var number = parseFloat(this.value.replace(tho_xcleaner, '').replace(dec_xsanitize, '.')); 
        this.value = isNaN(number) ? '0': number.toLocaleString(); 
        $(this).val(number); 
       });    

ЗАКАНЧИВАТЬ Fiddle link

+0

Идентификация Unkn0wn, я добавил эту строку, к сожалению, она не сделала трюка. –

+0

, но его работа в скрипке. Вы проверили скрипку? – Abhinav

+0

Я сделал, и действительно, десятичные знаки сохранены, однако форматирование исчезло, а десятичный разделитель превратился в период. Я хотел, чтобы запятая была разделителем десятичных чисел, и я хочу, чтобы моя ценность была сформирована с помощью toapands saparators (в моих периодах) в .focusOut() –