Advertisement
Guest User

Untitled

a guest
Oct 10th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. var containers = document.querySelectorAll("[data-calc]");
  2. var Calculadora = function(container) {
  3. var self = this;
  4. self.container = container;
  5. self.hiddentotal = self.container.querySelector("input[name='hiddentotal']");
  6. self.total = self.container.querySelector("input[name='total']");
  7. self.tamanhos = [].slice.call(self.container.querySelectorAll("input[name='tamanho[]']"));
  8. self.asplos = [].slice.call(self.container.querySelectorAll("input[name='asplo[]']"));
  9. self.valores = [].slice.call(self.container.querySelectorAll("input[name='valor[]']"));
  10. var onChange = function (event) {
  11. self.onInputChange(event);
  12. }
  13.  
  14. this.tamanhos.forEach(function (tamanho, indice) {
  15. tamanho.addEventListener("change", onChange);
  16. });
  17.  
  18. this.asplos.forEach(function (asplo, indice) {
  19. asplo.addEventListener("change", onChange);
  20. });
  21.  
  22. this.valores.forEach(function (valor, indice) {
  23. valor.addEventListener("change", onChange);
  24. });
  25. }
  26.  
  27. Calculadora.prototype.onInputChange = function (event) {
  28. //recuperando o valor do radio tamanho selecionado.
  29. var tamanho = this.tamanhos.filter(function (tamanho, indice) {
  30. return tamanho.checked
  31. })[0];
  32. tamanho = tamanho ? parseFloat(tamanho.dataset.valor) : 0;
  33.  
  34.  
  35. var asplo = this.asplos.filter(function (asplo, indice) {
  36. return asplo.checked
  37. })[0];
  38. asplo = asplo ? parseFloat(asplo.dataset.valor) : 0;
  39.  
  40. //somando os valores selecionados.
  41. var valor = this.valores.reduce(function (atual, proximo, indice) {
  42. var valor = atual;
  43. if (atual instanceof HTMLElement) {
  44. valor = atual.checked ? parseFloat(atual.dataset.valor) : 0;
  45. }
  46. if (proximo.checked) {
  47. valor += parseFloat(proximo.dataset.valor)
  48. }
  49. return valor;
  50. });
  51.  
  52. //não entendi o pq do seu total ser a soma do tamanho com os valores, mas isto já forge a parte tecnica.
  53. var total = tamanho + asplo + valor;
  54.  
  55. //formando o total como currency.
  56. //este metodo não é suportado pelo IE abaixo do 11, assim como pelo Safari.
  57. //para os browsers acima citados, é necessario uar um Polyfill (sugestão: https://github.com/andyearnshaw/Intl.js)
  58. var format = total.toLocaleString("pt-BR", { style: 'currency', currency: 'BRL' });
  59.  
  60. this.hiddentotal.value = total
  61. this.total.value = format;
  62. };
  63.  
  64. var calculadoras = [];
  65. [].forEach.call(containers, function (container, indice) {
  66. var calculadora = new Calculadora(container);
  67. calculadoras.push(calculadora);
  68. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement