2015-12-07 4 views
-1

Я использую следующий код, чтобы сделать только числовое число. Все идет хорошо, но это позволяет более чем один десятичные point.Experts пожалуйста, помогите ..Поле ввода займет только одну десятичную точку

$("#" + fieldId).keydown(function (e) { 
     // Allow: backspace, delete, tab, escape, enter and . 
     if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -1 || 
      // Allow: Ctrl+A 
      (e.keyCode == 65 && e.ctrlKey === true) || 
      // Allow: home, end, left, right 
      (e.keyCode >= 35 && e.keyCode <= 39)) { 
       // let it happen, don't do anything 
       return; 
     } 
     // Ensure that it is a number and stop the keypress 
     if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 
      e.preventDefault(); 
     } 

    }); 
+0

event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 190, если вам нужны десятичные числа. Если вы не хотите, чтобы десятичный код удалял это. –

+0

Я хочу десятичную..Но это будет только один .. Надеюсь, вы понимаете .. –

+0

'type =" number "' для ввода. – Jai

ответ

0

попробовать что-то вроде (от here)

$('.number').keypress(function(event) { 
    if ((event.which != 46 || $(this).val().indexOf('.') != -1) && 
    ((event.which < 48 || event.which > 57) && 
     (event.which != 0 && event.which != 8))) { 
    event.preventDefault(); 
    } 

    var text = $(this).val(); 

    if ((text.indexOf('.') != -1) && 
    (text.substring(text.indexOf('.')).length > 1) && 
    (event.which != 0 && event.which != 8) && 
    ($(this)[0].selectionStart >= text.length - 1)) { 
    event.preventDefault(); 
    } 
}); 
+0

сделайте что-нибудь в моем коде. Спасибо за ответ –

+0

@MakReza ваш код не имеет проверки использования десятичной только один раз. Если вы можете создать скрипку, я могу внести изменения в ваш код, а попробуйте это. – gurvinder372

+0

сделайте что-нибудь здесь. if ((e.shiftKey || (e.keyCode <48 || e.keyCode> 57)) && (e.keyCode <96 || e.keyCode> 105)) { e. preventDefault(); } –

0
Number.prototype.countDecimals = function() { 
    if(Math.floor(this.valueOf()) === this.valueOf()) return 0; 
    return this.toString().split(".")[1].length || 0; 
} 

Ex.

var x = 23.453453453; 
x.countDecimals(); // 9 

отсчет проверка перед event.preventDefault();

Это может вам помочь.

$("#" + fieldId).keydown(function (e) { 
     // Allow: backspace, delete, tab, escape, enter and . 
     if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -1 || 
      // Allow: Ctrl+A 
      (e.keyCode == 65 && e.ctrlKey === true) || 
      // Allow: home, end, left, right 
      (e.keyCode >= 35 && e.keyCode <= 39)) { 
       // let it happen, don't do anything 
       return; 
     } 
     // Ensure that it is a number and stop the keypress 
     if ($("#" + fieldId).val().countDecimals() >=2 || (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 
      e.preventDefault(); 
     } 

    }); 
+0

не работает ... –

+0

$ ("#" + fieldId) .val(). countDecimals() это даст десятичные точки. Если на любой клавише нажмите эту значение> или равно 2, то мы не будем писать этот ключ. –

+0

Можете ли вы создать console.log ($ ("#" + fieldId) .val(). countDecimals()> = 2) и проверить, false после 2 десятичных знаков. –

0

, если ваш доволен вашим решением, и вы хотите просто чтобы один decimale у вас будет просто добавить дополнительную строку, чтобы проверить, что я использую свой код, но я меняю KeyDown для нажатия клавиши в противном случае он не будет работать в поймать символ точки, я добавил (|| ($ (this) .val(). split ("."). length - 1> 0 & & String.fromCharCode (e.which) == '.')) в конце кода:

- добавленный код просто проверьте, есть ли уже точка, и если нажатая клавиша является точкой.

$("#" + fieldId).keypress(function (e) { 
     // Allow: backspace, delete, tab, escape, enter and . 
     if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -1 || 
      // Allow: Ctrl+A 
      (e.keyCode == 65 && e.ctrlKey === true) || 
      // Allow: home, end, left, right 
      (e.keyCode >= 35 && e.keyCode <= 39)) { 
       // let it happen, don't do anything 
       return; 
     } 
     // Ensure that it is a number and stop the keypress 
     if ($("#" + fieldId).val().countDecimals() >=2 || (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105 || ($(this).val().split(".").length - 1 > 0 && String.fromCharCode(e.which) == '.'))) { 
      e.preventDefault(); 
     } 

    }); 
  • ваш путь doening это обыкновение запретить пользователю вставив недопустимое содержание вам, что вы можете предотвратить пользователя от Дат с этим кодом:

    $("#" + fieldId).bind('paste', function (e) 
        { 
        e.preventDefault(); 
        }); 
    
  • Я советовал бы вам не проверить на kepress или keydown из-за:

  • пользователь может ввести точку после номера и оставить вход (например, 88. => недействителен), который ваш код не предотвратит (и в противном случае пользователь не может ввести число децимал).
  • bij нажатие многих клавиш в то же время я был abel, чтобы получить недопустимые символы на входе, не предотвращая их.

- Я бы посоветовал вам проверить на размытие, чтобы пользователь получил свободу редактирования, и вы можете быть уверены в подтверждении реального содержимого ввода.

Смежные вопросы