Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
185
rated 0 times [  187] [ 2]  / answers: 1 / hits: 36352  / 11 Years ago, thu, march 28, 2013, 12:00:00

I have got a task to prevent keypress two digits after a decimal number.
My jquery file is



$(function(){ 
$('#name').bind('paste', function(){
var self = this;
setTimeout(function() {
if(!/^[a-zA-Z]+$/.test($(self).val()))
$(self).val('');
}, 0);
});

$('#salary').bind('paste', function(){
var self = this;
setTimeout(function() {
if(!/^d*(.d{1,2})+$/.test($(self).val()))
$(self).val('');
}, 0);
});

$('.decimal').keyup(function(){
var val = $(this).val();
if(isNaN(val)){
val = val.replace(/[^0-9]./g,'');


if(val.split('.').length>2)
val =val.replace(/.+$/,);
}
$(this).val(val);
});
});


My html page is



<b>Name</b>
<input type=text id=name /><br/>
<b>Salary</b>
<input type=text id=salary class=decimal />


here i want only write 2 digits after decimal,how can i do this?
You can see my code in http://jsfiddle.net/V6s4B/


More From » html

 Answers
8

You can handle the key event before keyup on keypress, if the input is not to our liking we can disable the event from occurring. Something like this:



Update



Unfortunately my original answer below fails on certain numbers that can't be represented accurately as a float. Here is another solution that checks the position of the '.' character against the length of the string with a handy helper function.



jsFiddle



$('.decimal').keypress(function (e) {
var character = String.fromCharCode(e.keyCode)
var newValue = this.value + character;
if (isNaN(newValue) || hasDecimalPlace(newValue, 3)) {
e.preventDefault();
return false;
}
});

function hasDecimalPlace(value, x) {
var pointIndex = value.indexOf('.');
return pointIndex >= 0 && pointIndex < value.length - x;
}


Original answer



jsFiddle



$('.decimal').keypress(function (e) {
var character = String.fromCharCode(e.keyCode)
var newValue = this.value + character;
if (isNaN(newValue) || parseFloat(newValue) * 100 % 1 > 0) {
e.preventDefault();
return false;
}
});


Note that parseFloat(newValue) * 100 % 1 > 0 evaluates to true if newValue contains a number that has more than 2 decimal places.


[#79274] Wednesday, March 27, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kenyonmasonc

Total Points: 44
Total Questions: 117
Total Answers: 116

Location: Morocco
Member since Fri, May 22, 2020
4 Years ago
;