2012-01-16 3 views
0

У меня есть плагин, который форматирует число в качестве валюты, вставив десятичные & разделители тысяч:Как форматировать текст в качестве валюты

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

Если вы хотите передать параметры вашего плагина JQuery, просто принимают параметры вашей функции плагина.

$.fn.myPlugin = function(opts) { 

    ... 

    if (opts.thousands_type == ',') { 

    ... 

See here для получения дополнительной информации.

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: ',' 
}); 

Смотрите здесь в действии: http://jsfiddle.net/yywc7/


Примечания : это все еще нуждается в некоторой работе, так как клавиши со стрелками являются довольно mes sed up. Я использую его в своих проектах с подключением плагина к событию blur. Но, поскольку вам кажется, что он нужен на keyup, для работы с клавишами со стрелками требуется некоторая работа.

+0

Спасибо, что помогли мне ^^. Я хочу голосовать за вас, но у меня недостаточно репутации. – minh