logo

maskInputMoney | Mascara de moedas | jQuery Plugin

logo
Mascara de moeda

Mascara de moeda

Para fazer formulários de fácil compreenção é sempre recomendável colocar a formatação de como o campo vai ser preenchido, para isso eu sempre recomendei o Masked Input Plugin. Porém, este plugin (que vai ser comentádo no próximo post – masked input plugin | mascaras em campo | jquery plugin) não tem formatação do tipo moeda (R$ 1,00).

Sorte nossa que o Aurélio Saraiva fez um plugin para isso e o Raul Pereira da Silva fez algumas correções. Conheçam então o maskInputMoney maskInputMoney.

//maskMoney() faz a mascara normal do Dolar
$("#dolar").maskMoney()
//Faz a mascara de moeda do Brasil
//maskMoney({symbol:"R$",decimal:",",thousands:"."})
$("#real").maskMoney({symbol:"R$",decimal:",",thousands:"."})
//Monta no modelo euro
$("#euro").maskMoney({symbol:"Euro",decimal:",",thousands:" "})
//A precisão do decimal (,000) ;
$("#precision").maskMoney({decimal:",",thousands:" ",precision:3})

//Para remover a mascara
$("#dolar").unmaskMoney();

Demo:

Link atualizado: Repositório no GitHub


Bookmark and Share

55 marcas, uhull to “maskInputMoney | Mascara de moedas | jQuery Plugin”

  1. Haha.. usando…. :D

    Boa ruanito!
    ps: Compra meu WII!

  2. Vinicius disse:

    SHOW DE BOLA!!!!

    VLW

  3. Marlon Pascoal disse:

    Show de bola cara!

  4. Elaine disse:

    Ruan, tem como permitir q o usuario edite o valor sem ter que apagar tudo?

  5. Ricardo Longa disse:

    Ruan, você já trabalhou com JSF e RichFaces? Se a resposta for “SIM”, sabe dizer se é tranquilo usar este plugin do jQuery estes frameworks que citei?

    Abaixo segue um exemplo de JSF com o Masked Input Plugin:

    http://forum.darkside.com.br/vb/showthread.php?t=26907

    Abraço!

  6. Geolar disse:

    Estou aprendendo, parece bom, contudo senti falta de colocar o sinal (-) nos valores.

  7. Ricardo Longa disse:

    Ruan, novamente eu aqui…

    A dúvida agora é a seguinte, preciso salvar o valor R$ 0,00 como um valor válido. Acontece que se eu deixar o valor 0,00 no campo o plugin limpa o campo… Isso pra mim é um GRANDE problema.

    Sabe como posso resolver isso?

    Valeu!!!!

  8. Ricardo Longa disse:

    O meu problema é o seguinte, tem momentos que o usuário pode deixar o campo em branco (então persistirei null na base) e tem momentos em que o usuário pode optar por configurar o valor como R$ 0,00 (então devo persistir 0.0 na base).

    Será que é complicado colocar um parâmetro a mais no plugin? Tipo aquele allowZero ou showSymbol…

  9. Ralph Almeida disse:

    Opa, otima função! valeu

  10. Daniel Tré disse:

    Pessoal,
    parabéns mesmo! Esse plugin é muito massa!!
    Quando que crescer quero ser igual a vocês!
    uhawuahwuhuhawuuawuhuawuhaw
    abraços

  11. Fábio disse:

    Eu nao tinha lido esse post mas nem precisa responder a pergunta que fiz no post do markedinput pois esse aqui já me repondeu perfeitamente.

    Muito obrigado!

    Fábio

  12. Fiz algumas alterações interessantes para alguns.

    Corrigido simbologia para o Brasil;
    Bloqueado a sobreposição da máscara e duplicação de números em caso de carregamento dinâmico;
    Retorna o valor 0,00 em caso de não digitar nada.

    /*
    * @Copyright (c) 2010 Solon Albuquerque
    * @Page http://www.inordeste.com.br/maskMoney.js
    
    * Permission is hereby granted, free of charge, to any person
    * obtaining a copy of this software and associated documentation
    * files (the "Software"), to deal in the Software without
    * restriction, including without limitation the rights to use,
    * copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the
    * Software is furnished to do so, subject to the following
    * conditions:
    * The above copyright notice and this permission notice shall be
    * included in all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    * OTHER DEALINGS IN THE SOFTWARE.
    
    * Versão Anterior:	2008 Aurelio Saraiva (aureliosaraiva@gmail.com)
    * 					http://inovaideia.com.br/maskInputMoney
    
    *
    * SOLON ALBUQUERQUE
    * CORRIGIDO SIMBOLOGIA PARA O BRASIL
    * BLOQUEADO A SOBREPOSIÇÃO DA MÁSCARA E DUPLICAÇÃO DE NÚMEROS EM
    * CASO DE CARREGAMENTO DINÂMICO
    * RETORNA O VALOR 0,00 EM CASO DE NÃO DIGITAR NADA
    */
    
    /*
    * @Version: 0.3
    * @Release: 2010-07-17
    */
    (function($) {
    	$.fn.maskMoney = function(settings) {
    		settings = $.extend({
    			symbol: "R$",
    			decimal: ",",
    			precision: 2,
    			thousands: ".",
    			showSymbol:true
    		}, settings);
    
    		settings.symbol=settings.symbol+" ";
    
    		return this.each(function() {
    			var input=$(this);
    			function money(e) {
    				e=e||window.event;
    				var k=e.charCode||e.keyCode||e.which;
    				if (k == 8) { // tecla backspace
    					preventDefault(e);
    					var x = input.val().substring(0,input.val().length-1);
    					input.val(maskValue(x));
    					return false;
    				} else if (k == 9) { // tecla tab
    					return true;
    				}
    				if (k  57) {
    					preventDefault(e);
    					return true;
    				}
    				var key = String.fromCharCode(k);  // Valor para o codigo da Chave
    				preventDefault(e);
    				input.val(maskValue(input.val()+key));
    			}
    
    			function preventDefault(e) {
    				if (e.preventDefault) { //standart browsers
    					e.preventDefault()
    				} else { // internet explorer
    					e.returnValue = false
    				}
    			}
    
    			function maskValue(v) {
    				v = v.replace(settings.symbol,"");
    				var a = '';
    				var strCheck = '0123456789';
    				var len = v.length;
    				var t = "";
    				if (len== 0) {
    					t = "0.00";
    				}
    				for (var i = 0; i < len; i++)
    					if ((v.charAt(i) != '0') && (v.charAt(i) != settings.decimal))
    						break;
    
    				for (; i = 1;) {
    					t = t.substr(0,p) + settings.thousands + t.substr(p);
    				}
    				return setSymbol(t+settings.decimal+d+Array(
    					(settings.precision+1)-d.length).join(0));
    			}
    
    			function focusEvent() {
    				if (input.val()=="") {
    					input.val(setSymbol(getDefaultMask()));
    				} else {
    					input.val(setSymbol(input.val()));
    				}
    			}
    
    			function blurEvent() {
    				if (input.val()==setSymbol(getDefaultMask())) {
    					input.val("0,00");
    				} else {
    					input.val(input.val().replace(settings.symbol,"").replace(settings.thousands,""));
    				}
    			}
    
    			function getDefaultMask() {
    				var n = parseFloat("0")/Math.pow(10, settings.precision);
    				return (n.toFixed(settings.precision)).replace(
    					new RegExp("\\.", "g"), settings.decimal);
    			}
    
    			function setSymbol(v) {
    				if (settings.showSymbol) {
    					return settings.symbol+v;
    				}
    				return v;
    			}
    
    			if($(input).attr('rel') == undefined) {
    
    				$(input).attr('rel','ok');
    
    				input.bind("keypress",money);
    				input.bind("blur",blurEvent);
    				input.bind("focus",focusEvent);
    
    				input.one("unmaskMoney",function() {
    					input.unbind("focus",focusEvent);
    					input.unbind("blur",blurEvent);
    					input.unbind("keypress",money);
    					if ($.browser.msie)
    					this.onpaste= null;
    					else if ($.browser.mozilla)
    					this.removeEventListener('input',blurEvent,false);
    				});
    			}
    
    		});
    	}
    
    	$.fn.unmaskMoney=function() {
    		return this.trigger("unmaskMoney");
    	};
    })(jQuery);
    

    Abraços.

  13. Jorge Maia disse:

    Cara, como faço pra inserir essa máscara na página?

  14. Marcelo R Oliveira disse:

    Ruan, parabéns pelo plugin, muito bom mesmo.
    Abraço!

  15. Pererinha disse:

    thanks dude!

    very useful!

  16. samuel disse:

    Cara muito bem feito esse plugin , abraço.

  17. Diego Plentz disse:

    Olá Ruan, sou o novo mantenedor do plugin e agora ele está hospedado em https://github.com/plentz/jquery-maskmoney.

    Obrigado pelo post :)

  18. andré disse:

    Olá!
    A máscara ficou legal !! muito boa !!
    No entanto , não está gravando no meu banco. onde pode estar o erro?

  19. GUILHERME PEIXOTO disse:

    Cara fiz tudo certo, puxei o jquery, o plugin, coloquei o código postado na página, alterei o nome do input e não deu pq será? da uma olhada no meu código ai, valeu

    http://pastebin.com/EVcBA9g0

    • Ruan Carlos disse:

      Olá Guilherme, seguinte, seus label estão com o mesmo id que os input, como os label aparecem antes do que os input o jQuery pega eles, assim não funcionando.

      seu código:

      <label for="preco" id="preco">
      

      Correto:

      <label for="preco">
      

      Atenciosamente

logo
logo
Hospedado no Djalma | Ruan Carlos.