मेरे पास एक टेक्स्ट इनपुट है जहां मैं 2 दशमलव स्थानों और 1000 विभाजकों को अनुमति देने वाले मान को टाइप करते समय प्रारूपित करना चाहता हूं। इसे केवल अंकों की अनुमति देनी चाहिए। मैंने निम्नलिखित किया है लेकिन यह दशमलव अंक जोड़ने की अनुमति नहीं देता है। सीधे शब्दों में कहें तो यह किसी उत्पाद (मुद्रा) की कीमत दर्ज करने के लिए है।

INPUT = 1234560ABC.5665 (केवल संख्याओं की अनुमति होनी चाहिए)

अपेक्षित = 1,234,560.56 (दशमलव स्थानों को 2 तक सीमित करना चाहिए)

मैंने निम्नलिखित किया है, लेकिन यह नहीं पता कि दशमलव मानों को "।" के बाद कैसे जोड़ा जाए। "," 1000 विभाजकों को सुरक्षित करना।

<input type="text" id="price" name="price" />

$('#price').keyup(function (event) {
    $(this).val(function (index, value) {
        return '$' + value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    });
});
1
TechyTee 3 अप्रैल 2018, 09:46

2 जवाब

सबसे बढ़िया उत्तर
$('#price').on('keyup click change paste input', function (event) {
    $(this).val(function (index, value) {
        if (value != "") {
            //return '$' + value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
            var decimalCount;
            value.match(/\./g) === null ? decimalCount = 0 : decimalCount = value.match(/\./g);

            if (decimalCount.length > 1) {
                value = value.slice(0, -1);
            }

            var components = value.toString().split(".");
            if (components.length === 1)
                components[0] = value;
            components[0] = components[0].replace(/\D/g, '').replace(/\B(?=(\d{3})+(?!\d))/g, ',');
            if (components.length === 2) {
                components[1] = components[1].replace(/\D/g, '').replace(/^\d{3}$/, '');
            }

            if (components.join('.') != '')
                return '$' + components.join('.');
            else
                return '';
        }
    });
});
1
TechyTee 3 अप्रैल 2018, 08:43

आप keyup के बजाय keydown ईवेंट में कुंजियों को सीमित कर सकते हैं और विशिष्ट कुंजियों को प्रभावी होने की अनुमति दे सकते हैं, और फिर keyup ईवेंट पर इनपुट को प्रारूपित कर सकते हैं:

$("#testinput").on("keydown", function(e) {
  var keycode = (event.which) ? event.which : event.keyCode;
  if (e.shiftKey == true || e.ctrlKey == true) return false;
  if ([8, 110, 39, 37, 46].indexOf(keycode) >= 0 || // allow tab, dot, left and right arrows, delete keys
    (keycode == 190 && this.value.indexOf('.') === -1) || // allow dot if not exists in the value
    (keycode == 110 && this.value.indexOf('.') === -1) || // allow dot if not exists in the value
    (keycode >= 48 && keycode <= 57) || // allow numbers
    (keycode >= 96 && keycode <= 105)) { // allow numpad numbers
    // check for the decimals after dot and prevent any digits
    var parts = this.value.split('.');
    if (parts.length > 1 && // has decimals
      parts[1].length >= 2 && // should limit this
      (
        (keycode >= 48 && keycode <= 57) || (keycode >= 96 && keycode <= 105)
      ) // requested key is a digit
    ) {
      return false;
    } else {
      if (keycode == 110) {
        this.value += ".";
        return false;
      }
      return true;
    }
  } else {
    return false;
  }
}).on("keyup", function() {
  var parts = this.value.split('.');
  parts[0] = parts[0].replace(/,/g, '').replace(/^0+/g, '');
  if (parts[0] == "") parts[0] = "0";
  var calculated = parts[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
  if (parts.length >= 2) calculated += "." + parts[1].substring(0, 2);
  this.value = calculated;
  if (this.value == "NaN" || this.value == "") this.value = 0;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="testinput">
4
Taha Paksu 3 अप्रैल 2018, 11:48