Skip to content

Instantly share code, notes, and snippets.

@bofh19
Created October 2, 2016 22:53
Show Gist options
  • Save bofh19/38be0c95fb9b4425fd2abd5a330fd7c3 to your computer and use it in GitHub Desktop.
Save bofh19/38be0c95fb9b4425fd2abd5a330fd7c3 to your computer and use it in GitHub Desktop.
jquery currency format
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input class="number">
<script type="text/javascript">
function setCurrencyFormat(elem){
elem.on('focusin', function(){
//console.log("Saving value " + $(this).val());
$(this).data('val', $(this).val());
});
elem.on('focusout', function(){
//console.log("Saving value " + $(this).val());
val = $(this).val();
if(val.indexOf(".") < 0){
$(this).val(val+".00");
}else{
vals = val.split(".");
if(vals[1].length == 1){
$(this).val(val+"0");
}else if(vals[1].length <= 0){
$(this).val(val+"00");
}
}
});
elem.keydown(function(event){
save_val = $(event.target).val();
if(save_val.indexOf(".") > 0){
save_vals = save_val.split('.');
if(save_vals[0].length <= 10 && save_vals[1].length <= 2){
//console.log("Saving value " + $(event.target).val());
$(this).data('val', $(event.target).val());
}
}else{
save_val = save_val.replace(/\D/g, "");
if(save_val.length <= 8 ){
//console.log("Saving value " + $(event.target).val());
$(this).data('val', save_val.replace(/\B(?=(\d{3})+(?!\d))/g, ","));
}
}
});
elem.keyup(function(event) {
after_decimal = false;
current_caret_pos = getCaretPos(event.target);
if(current_caret_pos > $(event.target).val().indexOf(".")){
after_decimal = true;
}
if(isSelectionRange(event.target)){
return;
}
// skip for arrow keys
if(event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function(index, value) {
save_val = $(event.target).val();
var prev = $(event.target).data('val');
val = value.split(".");
if(val.length >= 2){
last_dot_part = val.slice(val.length-1,val.length);
last_dot_part = last_dot_part.join('').replace(/\D/g, "");
if(last_dot_part.length > 2){
return prev;
}
first_part = val.slice(0,val.length-1);
first_part = first_part.join('').replace(/\D/g, "");
// console.log(first_part.length);
if(first_part.length > 8){
return prev;
}
first_part = first_part.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return first_part + "."+last_dot_part;
}else{
val = val[0];
val = val.replace(/\D/g, "");
if(val.length > 8){
return prev.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
return val.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
});
pos_before_decimal = $(event.target).val();
decimal_pos = pos_before_decimal.indexOf(".");
if(decimal_pos >= 0 && !after_decimal){
setCaretPosition(event.target, decimal_pos)
}
});
function isSelectionRange(input){
is_range = false;
// Internet Explorer Caret Position (TextArea)
if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
var bookmark = range.getBookmark();
var caret_pos = bookmark.charCodeAt(2) - 2;
if(range > 0){
is_range = true;
}
} else {
// Firefox Caret Position (TextArea)
if (input.setSelectionRange){
var caret_pos = input.selectionStart;
var caret_end_pos = input.selectionEnd;
if(caret_pos < caret_end_pos){
is_range = true;
}
}
}
return is_range;
}
function getCaretPos(input) {
// Internet Explorer Caret Position (TextArea)
if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
var bookmark = range.getBookmark();
var caret_pos = bookmark.charCodeAt(2) - 2;
} else {
// Firefox Caret Position (TextArea)
if (input.setSelectionRange)
var caret_pos = input.selectionStart;
}
return caret_pos;
}
function setCaretPosition(elem, caretPos) {
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
}
setCurrencyFormat($('input.number'));
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment