Jump to content
marco_fcp

Somar valores inputs/checkbox

Recommended Posts

Estou tentando criar este código para quando escolher uma option no select, ele pegar nesse valor, e somar com quantos checksbox o utilizador quiser. Aí, no fim, no campo do valortotal conforme a option que escolher, irá subtrair um desconto do valor total. Penso ter feito os scripts, mas não estou a conseguir o resultado final com o desconto, dinâmico no mesmo campo.

<!-- Pedido de Orçamento -->

    <div class="container-fluid mb-5">
        <div class="row">

            <div class="col-lg-2"></div>
            <div class="col-lg-8 mb-5">
                <div class="caixa-orcamento pb-5">
                    <form action="" method="POST" onchange="atualizarPreco()" name="formulario">
                        <h3 class="text-center pt-5 pb-4 labels">Pedido de Orçamento:</h3>
                        <table class="m-auto">
                            <tr>
                                <td class="fw-bold labels">Tipo de página web:</td>
                                <td>
                                    <!-- Três tipos de pãgina Fictícia com os valores de 400, 500 e 600 respetivamente -->
                                    <select name="tipopagina" id="tipopagina" required>
                                        <option value="0"></option>
                                        <option value="400" id="estatica">Estática</option>
                                        <option value="500" id="dinamica" >Dinâmica</option>
                                        <option value="600" id="loja" >Loja</option>
                                    </select>
                                </td>
                            </tr>
                            <tr>
                                <!-- Descontos de Prazo - de 1 Mes- 5%, 2 Meses-10%, 3 Meses- 15$, 4 Meses- 20%, em diante sempre 20% -->
                                <td class="fw-bold labels">Prazo em meses:</td>
                                <td><input type="number" id="prazo"></td>
                            </tr>
                        </table>
                        <h5 class="text-center pt-5 pb-4 labels">Marque os separadores desejados</h5>

                        <!-- Cada check selecionado soma 400 ao valor total -->
                        <div class="checkbox labels text-center mb-5">
                            <input type="checkbox" class="checkbox" id="check" name="separadores" value="400" onchange="somar(this)">Quem Somos
                            <input type="checkbox" class="checkbox" id="check" name="separadores" value="400" onchange="somar(this)">Onde estamos
                            <input type="checkbox" class="checkbox" id="check" name="separadores" value="400" onchange="somar(this)">Galeria de fotografias <br>
                            <input type="checkbox" class="checkbox" id="check" name="separadores" value="400" onchange="somar(this)">eCommerce
                            <input type="checkbox" class="checkbox" id="check" name="separadores" value="400" onchange="somar(this)">Gestão Interna
                            <input type="checkbox" class="checkbox" id="check" name="separadores" value="400" onchange="somar(this)">Notícias
                            <input type="checkbox" class="checkbox" id="check" name="separadores" value="400" onchange="somar(this)">Redes Sociais
                        </div>
                        <h5 class="text-center labels">Orçamento estimado:</h5>
                        <p class="text-center labels">(É um valor meramente indicativo, pode sofrer alterações)</p>
                        <div class="resultado-orcamento text-center">

                            <!-- Valor total do orçamento com os botões de resetar e submeter o orçamento -->
                            <input type="text" id="valor-orcamento" name="valor-orcamento" value="">
                            <br>
                            <button type="reset" class="btn btn-primary mt-4" id="reset" name="reset">Apagar Orçamento</button>
                            <button type="submit" class="btn btn-primary mt-4" id="submeter" name="submeter">Submeter Orçamento</button>
                        </div>
                    </form>
                </div>
            </div>
            <div class="col-lg-2"></div>

        </div>
    </div>
function atualizarPreco() {
    var preco = 0;
    // Tipo de página Selecionada com preços Diferentes

    if (document.getElementById('tipopagina').value == '400') {
        preco = 400;
    }
    if (document.getElementById('tipopagina').value == '500') {
        preco = 500;
    }
    if (document.getElementById('tipopagina').value == '600') {
        preco = 600;
    } 
    
    // Desconto de 5% por cada mês de prazo (sobre valor total do orçamento) (máximo 20% de desconto que equivale a 4 meses máximo. A partir daí é sempre 20%)

    var prazo = document.getElementById('prazo').value;
    if (prazo == 0) {
        preco = preco + 0;
    } else if (prazo == 1) {
        preco = preco - (preco * 0.05);
    } else if (prazo == 2) {
        preco = preco - (preco * 0.10);
    } else if (prazo == 3) {
        preco = preco - (preco * 0.15);
    } else {
        preco = preco - (preco * 0.20);
    }

    document.getElementById('valor-orcamento').value = preco;

    // Código que soma 400€ ao total por cada checkbox selecionado

    var soma1 = 0;
    function somar(check) {
        if ( check.checked ){
            soma1 += 1*check.value;    
        } else {
            soma1 -= 1*check.value;
        } 

        document.getElementById("valor-orcamento").value = soma1;
    }
    
}

 

Share this post


Link to post
Share on other sites
<div class="container-fluid mb-5">
  <div class="row">

    <div class="col-lg-2"></div>
    <div class="col-lg-8 mb-5">
      <div class="caixa-orcamento pb-5">
        <form action="" method="POST" onchange="atualizarPreco()" name="formulario">
          <h3 class="text-center pt-5 pb-4 labels">Pedido de Orçamento:</h3>
          <table class="m-auto">
            <tr>
              <td class="fw-bold labels">Tipo de página web:</td>
              <td>
                <!-- Três tipos de pãgina Fictícia com os valores de 400, 500 e 600 respetivamente -->
                <select name="tipopagina" id="tipopagina" required>
                  <option value="0"></option>
                  <option value="400" id="estatica">Estática</option>
                  <option value="500" id="dinamica" >Dinâmica</option>
                  <option value="600" id="loja" >Loja</option>
                </select>
              </td>
            </tr>
            <tr>
              <!-- Descontos de Prazo - de 1 Mes- 5%, 2 Meses-10%, 3 Meses- 15$, 4 Meses- 20%, em diante sempre 20% -->
              <td class="fw-bold labels">Prazo em meses:</td>
              <td><input type="number" min='0' id="prazo"></td>
            </tr>
          </table>
          <h5 class="text-center pt-5 pb-4 labels">Marque os separadores desejados</h5>

          <!-- Cada check selecionado soma 400 ao valor total -->
          <div class="checkbox labels text-center mb-5">
            <input type="checkbox" class="checkbox" name="separador-1" value="400">Quem Somos
            <input type="checkbox" class="checkbox" name="separador-2" value="400">Onde estamos
            <input type="checkbox" class="checkbox" name="separador-3" value="400">Galeria de fotografias <br>
            <input type="checkbox" class="checkbox" name="separador-4" value="400">eCommerce
            <input type="checkbox" class="checkbox" name="separador-5" value="400">Gestão Interna
            <input type="checkbox" class="checkbox" name="separador-6" value="400">Notícias
            <input type="checkbox" class="checkbox" name="separador-7" value="400">Redes Sociais
          </div>
          <h5 class="text-center labels">Orçamento estimado:</h5>
          <p class="text-center labels">(É um valor meramente indicativo, pode sofrer alterações)</p>
          <div class="resultado-orcamento text-center">

            <!-- Valor total do orçamento com os botões de resetar e submeter o orçamento -->
            <input type="text" id="valor-orcamento" name="valor-orcamento" value="">
            <br>
            <button type="reset" class="btn btn-primary mt-4" id="reset" name="reset">Apagar Orçamento</button>
            <button type="submit" class="btn btn-primary mt-4" id="submeter" name="submeter">Submeter Orçamento</button>
          </div>
        </form>
      </div>
    </div>
    <div class="col-lg-2"></div>

  </div>
</div>
const eTipoPagina = document.getElementById('tipopagina')
const eValorOrcamento = document.getElementById('valor-orcamento')

// elementos que, ao serem alterados, devem atualizar o preço
const eObserved = document.querySelectorAll('#tipopagina, #prazo, div.checkbox input[type="checkbox"]')

for (const element of eObserved) {
  element.addEventListener('input', atualizarPreco)
}

function atualizarPreco() {
  let preco = eTipoPagina.value

  // Desconto de 5% por cada mês de prazo (sobre valor total do orçamento) (máximo 20% de desconto que equivale a 4 meses máximo. A partir daí é sempre 20%)

  var prazo = document.getElementById('prazo').value
  if (prazo == 0) {
    preco = +preco + 0
  } else if (prazo == 1) {
    preco = +preco - (preco * 0.05)
  } else if (prazo == 2) {
    preco = +preco - (preco * 0.10)
  } else if (prazo == 3) {
    preco = +preco - (preco * 0.15)
  } else {
    preco = +preco - (preco * 0.20)
  }

  // percorre cada checkbox marcado e acrescenta o valor ao preço
  for (const checkBox of document.querySelectorAll('div.checkbox input[type="checkbox"]')) {
    if (checkBox.checked) {
      preco = +preco + +checkBox.value
    }
  }


  eValorOrcamento.value = preco
}

 

Share this post


Link to post
Share on other sites

Muito obrigado Washalbano, para quem é iniciante você não imagina como por vezes pequenas coisas conseguem criar confusão e dúvida. Resultou, vou estudar o código que você me passou para entender ele.

Muito obrigado mesmo !!! Abraço de Portugal !!!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Wanderson Moreira
      Bom dia,
      alguém pode me ajudar com uma situação?
      estou utilizando um script pra fazer o carregamento assíncrono do site.
      var links = document.querySelectorAll('a'); function handleClick(event) { event.preventDefault(); fetchPage(event.target.href); window.history.pushState(null, null, event.target.href); window.scrollTo(0, 0); } async function fetchPage(url) { document.querySelector('.content'); var pageResponse = await fetch(url); var pageText = await pageResponse.text(); replaceContent(pageText); } function replaceContent(newText) { var newHtml = document.createElement('div'); newHtml.innerHTML = newText; var oldContent = document.querySelector('.content'); var newContent = newHtml.querySelector('.content'); oldContent.innerHTML = newContent.innerHTML; document.title = newHtml.querySelector('title').innerText; } window.addEventListener('popstate', () => { fetchPage(window.location.href); }) links.forEach(link => { link.addEventListener('click', handleClick); }) O problema em questão é que, o conteúdo da pagina que é carregado dentro da div content não funciona corretamente
       
      os scripts em javascript não são executados;
      os links de navegação da pagina não funcionam de maneira assincrona, diferente dos links de navegação do menu
       
       
    • By Jack Oliveira
      Ola pessoal eu gostaria de saber se teria como e se sim, como fazer para pegar lat e lng quando fazer a busca do endereco pelo cep,
      Tentei buscar uns exemplos de como poderia ser feito, porem não obtive resultado que precisava.
       
      o código a baixo ele funciona sem problema, porem so precisaria pegar esta LAT e LNG 
       
       
      //Buscando endereco plo CEP function limpa_formulário_cep() { //Limpa valores do formulário de cep. document.getElementById('rua').value=(""); document.getElementById('bairro').value=(""); document.getElementById('cidade').value=(""); document.getElementById('uf').value=(""); } function meu_callback(conteudo) { if (!("erro" in conteudo)) { //Atualiza os campos com os valores. document.getElementById('rua').value=(conteudo.logradouro); document.getElementById('bairro').value=(conteudo.bairro); document.getElementById('cidade').value=(conteudo.localidade); document.getElementById('uf').value=(conteudo.uf); } //end if. else { //CEP não Encontrado. limpa_formulário_cep(); alert("CEP não encontrado."); } } function pesquisacep(valor) { //Nova variável "cep" somente com dígitos. var cep = valor.replace(/\D/g, ''); //Verifica se campo cep possui valor informado. if (cep != "") { //Expressão regular para validar o CEP. var validacep = /^[0-9]{8}$/; //Valida o formato do CEP. if(validacep.test(cep)) { document.getElementById('cep').value = cep.substring(0,5) +"-" +cep.substring(5); //Preenche os campos com "..." enquanto consulta webservice. document.getElementById('rua').value="..."; document.getElementById('bairro').value="..."; document.getElementById('cidade').value="..."; document.getElementById('uf').value="..."; //Cria um elemento javascript. var script = document.createElement('script'); //Sincroniza com o callback. script.src = 'https://viacep.com.br/ws/'+ cep + '/json/?callback=meu_callback'; //Insere script no documento e carrega o conteúdo. document.body.appendChild(script); } //end if. else { //cep é inválido. limpa_formulário_cep(); alert("Formato de CEP inválido."); } } //end if. else { //cep sem valor, limpa formulário. limpa_formulário_cep(); } }; </script>  
      <?php // Map($Width, $Height, $StringNome, $StringEndereco, $StringCidade) $LAT = '37.86926'; $LNG = '-122.254811'; ?> <script> // gmap for street view panorama = GMaps.createPanorama({ el: '#MapCanvasStreet', lat : <?= $LAT; ?>, lng : <?= $LNG; ?>, }); </script> Desde já fico grato!!
    • By Jack Oliveira
      Ola pessoal montando um limitador a ser selecionado no SELECT OPTION ele ate faz a contagem  certo etc...
       
      porem não estou conseguindo fazer esta contagem continuar pois ja esta cadastrado no banco o maximo permetido
       
      <div class="col-md-6"> <div class="form-group"> <label>Categorias: </label> <select class="form-control select2" name="categorias[]" id="SelecionaQtdOption" multiple="multiple" data-placeholder="<?php echo $txt['todos_os_mods']; ?>"> <option value="">Selecionar Categorias</option> <?php foreach($categorias as $categoria){ if(strpos($Dados['categorias'], $categoria['titulo']) !== false){ ?> <option selected value="<?= $categoria['titulo']; ?>"><?= $categoria['titulo']; ?></option> <?php } else { ?> <option value="<?= $categoria['titulo']; ?>"><?= $categoria['titulo']; ?></option> <?php } } ?> </select> </div> </div> java esta desta forma
      <?php $QtdCategoria = 3; ?> <script type="text/javascript"> $(document).ready(function() { var selecionarOpiton = null; $('#SelecionaQtdOption').change(function(event) { if ($(this).val().length == <?= $QtdCategoria; ?>) { //Limitar Quantidade de categoria a ser selecionanda no select Option $(this).val(selecionarOpiton); } else { selecionarOpiton = $(this).val(); } }); }); </script>  
    • By gersonab
      Bom dia a todos, preciso aplicar duas máscaras em uma janela modal, não estou conseguindo fazer, fora dela as mascaras funcionam.
      <div class="form-group col-md-4"> <label>Data pagamento</label> <input type="text" name="dataval" class="form-control" id="dataapp"> </div> <div class="form-group col-md-4"> <label>Valor</label> <input type="text" name="valpro" class="form-control" id="money"> </div> utilizo este plugin
      <script src="../plugins/input-mask/jquery.inputmask.bundle.min.js"></script> $("#money").inputmask("999,999,999.999"); $("#dataapp").inputmask("99/99/9999"); desde já agradeço qq ajuda
    • By Jack Oliveira
      Ola pessoal boa noite 
       
      Bom é o seguinte
       
      Como eu posso fazer uma contagem de imagens que poderá ser carregado pelo input  file
      Exemplos 
      <!-- img1 carregar apenas 3 imagens --> <input type="file" name="img1"> <!-- img2 carregar apenas 6 imagens --> <input type="file" name="img2"> <!-- img3 carregar apenas 9 imagens --> <input type="file" name="img3"> <!-- img4 carregar apenas 12 imagens --> <input type="file" name="img4"> Ouver um jeito também de bloquear se for selecionado mais do que for permitido...
       
      Já vi isso em alguns site quando for selecionar as imagens se passar da quantidade ele não seleciona mais nenhuma imagem. 
       
      Se img1 ja tiver as 3 imagens nao permite selecionar ou então ocultar o input se a quantidade ja foi cadastrada..
       
      Se o usuário tiver as 3 imagens e se ele apagou uma ele podera selecionar apenas uma e nada mais...
       
      Se teria como fazer isso apenas com php ou teria que usar jquery ou javascript..
       
      Espero que possam entender..
       
       
      Obs: não precisa ser codigo grande pra pouca coisa; que possa ser mais simplificado possível..
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.