我有一个插件,可以将数字格式化为货币,方法是插入十进制和&成千上万的分隔符:
1000 -> 1.000
10000,5 -> 10.000,5
我称之为:
$('#input').myPlugin()
但是我想通过指定用于小数和千位分隔符的字符来调用它:
$('#input').myPlugin({thousand_type: ',' , decimal_type '.'}).
如何在插件中实现这一目标?
这是插件:
(function( $ ){
$.fn.myPlugin = function() {
$('input').keypress(function(event){
if ((event.which < 48 || event.which > 57) && event.which != 8 && event.which != 44)
event.preventDefault();
});
$('input').keyup(function(event) {
event.preventDefault();
val = $(this).val();
if(val != ''){
thousand_type = '.';
if(thousand_type == '.'){
decimal_type = ',';
}else{
decimal_type = '.';
}
//remove thousand mark
if(thousand_type == '.'){
val = String(val).replace(/\./g, "");
}else{
val = String(val).replace(/\,/g, "");
}
//get position of decimal mark
pos_decimal = String(val).indexOf(decimal_type);
//device the number to thousand and decimal
if(pos_decimal > -1){
sub_decimal = String(val).substring(pos_decimal, String(val).length);
sub_thousand = String(val).substring(0, pos_decimal);
}else{
sub_decimal = '';
sub_thousand = val;
}
//1.111.111,33
//remove decimal mark
if(decimal_type == '.'){
removed_mark_val = String(val).replace(/\./g, "");
}else{
removed_mark_val = String(val).replace(/\,/g, "");
}
//check is Numeric
result = IsNumeric(removed_mark_val);
if(result == true){
if(thousand_type == '.'){
sub_thousand = String(sub_thousand).split("").reverse().join("")
.replace(/(.{3}\B)/g, "$1" + thousand_type)
.split("").reverse().join("");
}else{
sub_thousand = String(sub_thousand).split("").reverse().join("")
.replace(/(.{3}\B)/g, "$1" + thousand_type)
.split("").reverse().join("");
}
val = sub_thousand + sub_decimal;
//1111111,33
$(this).attr('value',val);
}else{
}
}
});
function IsNumeric(input){
var RE = /^-{0,1}\d*\.{0,1}\d+$/;
return (RE.test(input));
}
};
})( jQuery );
答案 0 :(得分:1)
这是我写的一个插件(缩小了319个字节):
(function($)
{
$.fn.myPlugin = function(options)
{
options = $.extend({
thousands: ',',
decimal: '.'
}, options);
return this.keyup(function()
{
$(this).val(function(el, val)
{
val = val.replace(/[^\d.,]/g, '').split(options.decimal);
val[0] = val[0].replace(options.decimal === '.' ? /,/g : /\./g, '');
val[0] = val[0].replace(/(\d)(?=(\d{3})+$)/g, "$1" + options.thousands);
return val.join(options.decimal);
});
});
};
})(jQuery);
像这样使用:
$('input').myPlugin({
thousands: '.',
decimal: ','
});
在此处查看:[{3}}
注意:这仍然需要一些工作,因为箭头键非常混乱。我在我的项目中使用它,插件绑定到blur
事件。但是因为你似乎想要它keyup
,所以需要做一些工作来使用箭头键。
答案 1 :(得分:0)
如果要将参数传递给jQuery插件,只需接受插件函数的参数即可。
$.fn.myPlugin = function(opts) {
...
if (opts.thousands_type == ',') {
...
See here了解更多信息。