Skip to content

Instantly share code, notes, and snippets.

@niotech
Last active August 29, 2015 14:02
Show Gist options
  • Save niotech/657dd5d3919ef012e73f to your computer and use it in GitHub Desktop.
Save niotech/657dd5d3919ef012e73f to your computer and use it in GitHub Desktop.
jquery.currency.js : jQuery plugin to create text input as currency format then validate and accept numbers only
$.fn.CurrencyInput = function(options){
var opts = $.extend({}, $.fn.CurrencyInput.defaults, options);
return this.each(function(){
var el = $(this);
var form_group = el.parents(opts.parent_wrapper);
var message_wrapper = form_group.find(opts.message_notification);
var min = opts.min, max = opts.max;
var value_target = opts.value_target;
if($(this).data('min') != undefined && !isNaN(parseInt($(this).data('min')))){
min = $(this).data('min');
}
if($(this).data('max') != undefined && !isNaN(parseInt($(this).data('max')))){
max = $(this).data('max');
}
if($(this).data('target') != undefined){
value_target = $(this).data('target');
}
el.keyup(function(e){
var $this = $(this);
var input = $this.val().trim();
var re, output;
var target = form_group.find(value_target);
if((e.keyCode < 48 && (e.keyCode != 37 && e.keyCode != 39 && e.keyCode != 8)) || e.keyCode > 57){
output = target.val().split("").reverse().join("").replace(/(\d{3})(?!$)/g, "$1.").split("").reverse().join("");
$this.val(output);
return;
}
if(e.keyCode == 37 || e.keyCode == 39) return;
form_group.removeClass('has-error');
message_wrapper.removeClass('text-danger');
message_wrapper.text('');
if(input.length == 0){
target.val('');
}
re = new RegExp("\\" + opts.separator_symbol, "g");
input = new String(input);
input = input.replace(re, "");
input = parseInt(input);
// if(input.length == 0 && target.val().trim().length != 0){ $this.val(target.val()); }
output = $.fn.CurrencyInput.format(input, opts.separator_symbol);
if(output === false || output == 0){
form_group.addClass('has-error');
message_wrapper.addClass('text-danger');
message_wrapper.text('Mohon masukkan bilangan bulat!');
return;
}
if(input.length > 0 && input < min || input > max){
form_group.addClass('has-error');
message_wrapper.addClass('text-danger');
message_wrapper.text('Nilai harus berada dalam rentang ' + $.fn.CurrencyInput.format(min, opts.separator_symbol) + '-' + $.fn.CurrencyInput.format(max, opts.separator_symbol));
return;
}
$this.val(output);
target.val(input);
form_group.removeClass('has-error');
message_wrapper.removeClass('text-danger');
message_wrapper.text('');
});
});
}
// input must be a number!
$.fn.CurrencyInput.format = function(input, separator){
if(isNaN(input)){ return false; }
if(input == 0){ return 0; }
input = new String(input);
return input.split("").reverse().join("").replace(/(\d{3})(?!$)/g, "$1" + separator).split("").reverse().join("");
}
$.fn.CurrencyInput.defaults = {
min: 0,
max: 100,
message_notification: '.validation-message',
parent_wrapper: '.form-group',
value_target: '', // a hidden field with the real input name
separator_symbol: '.'
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment