Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedrohcosta

Capturar valor de um select com java script

Recommended Posts

Boa tarde Pessoal, 

 

Sou novo no forum e comecei agora a mexer com javascript e estou me matando para tentar criar uma solução para o meu formulário feito em php. 

Vou explicar o que o meu formulário faz para vocês entenderem o que eu preciso fazer. 

Esse formulario eu tenho um campo onde eu preencho o CPF e abaixo tenho uma tag select que eu seleciono o serviço, e tenho um input na frente, onde eu devo colocar o valor do serviço. 

O select e o input são dinamicos, criei um javascript para adicionar e remover inputs e selects. 

Até ai tudo bem... mas eu preciso bloquear o input de acordo com o valor do select, eu até consegui fazer, mas apenas na primeira div, quando eu adiciono outro campo com input e select o codigo não funciona para essa div, apenas para a primeira. 

Segue meu html: 

<div class="col-sm-3 col-md-3">
            <label for="teste" class="control-label">Serviço:</label>
            <select name="tpservico[]" onchange="alterar()" class="sele form-control" autofocus="">
                <option value="1">Abertura de Conta Poupança</option>
                <option value="4">Cheque Especial</option>
                <option value="2">Consignado</option>
                <option value="8">tesssstennntdao</option>
            </select>
       </div>
        <div class="col-sm-3 col-md-3">
                   <label for="teste" class="control-label">Valor do Serviço:</label>
                <input class="form-control" type="text" name="vlserv[]" maxlength="10" onkeyup="moeda(this);" '="" value=""><br>
        </div>
        <div class="col-sm-2 col-md-2" align="center"><br>
                <button type="button" class="removerCampo btn btn-danger" name="Remover">
                        <i class="glyphicon glyphicon-minus"></i> Remover
                </button>                
         </div>

 

Segue o meu codigo java script: 


function alterar(){    
 
 var sele = document.querySelector('.sele','.form-control');
  
        if(sele.value ==1){
            alert('campo bloqueado');
        }
         
        if(sele.value ==4){
            alert('campo bloqueado');
        }
         
        if(sele.value ==8){
            alert('campo bloqueado');
        }
        

    
}
 

Se alguém puder me ajudar ficaria muito grato. 
Lembrando que esse alert eu coloquei apenas para teste, para ver se o código estava funcionado, ainda vou incrementar o bloqueio do input. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja:

Spoiler

<script>
    function mostarOpcao() {
        var selecionado = document.getElementById('meu_select').value;
        document.getElementById('receber_valor').innerHTML = selecionado;
    }
</script>
<select id="meu_select" onchange="mostarOpcao();">
    <option value="">Selecione</option>
    <option value="selecionou o numero 1">Opção 1</option>
    <option value="selecionou o numero 2">Opção 2</option>
    <option value="selecionou o numero 3">Opção 3</option>
</select>
<br />
<div id="receber_valor"></div>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Omar~ muito obrigado pela resposta, mas gostaria de entender uma coisa, no meu caso eu tenho um botão que cria vários selects dinâmicos e em cada select tem uma div, se eu colocar um id no select irá funcionar só no primeiro select ou não?

E outra dúvida nessa linha de código:

document.getElementById('receber_valor').innerHTML = selecionado;

No final tem uma div em branco que é a receber_valor, Não entendi muito bem a funcionalidade dela, teria como me explicar por favor, me desculpe pela quantidade de perguntas, mas é que comecei agora a mexer com javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente esse elemento 'receber_valor' era só para mostra qual foi o resultado obtido do value que é a variável selecionado.

Sim no caso que mostrei anteriormente só irá funcionar o primeiro pois uma página jamais pode possuir mais de um elemento com o mesmo ID.

 

Pois bem, existem diversas formas de detectar qual é o select que foi acionado.

Uma pode ser passando o ID do select como parâmetro para função, acho mais viável pois a velocidade de processamento é mais rápido assim.

Spoiler

<script>
    function mostarOpcao(id_do_elemento) {
        var selecionado = document.getElementById(id_do_elemento).value;
        alert('Selecionado o ' + id_do_elemento + ' e o valor foi:' + selecionado);
    }
</script>

<select id="meu_select-a" onchange="mostarOpcao(this.id);">
    <option value="">Selecione</option>
    <option value="numero 1 a">Opção 1</option>
    <option value="numero 2 a">Opção 2</option>
    <option value="numero 3 a">Opção 3</option>
</select>
<select id="meu_select-b" onchange="mostarOpcao(this.id);">
    <option value="">Selecione</option>
    <option value="numero 1 b">Opção 1</option>
    <option value="numero 2 b">Opção 2</option>
    <option value="numero 3 b">Opção 3</option>
</select>

 

 

Uma outra forma das diversas possíveis é não usar um identificador e sim um className e executar um loop para chegar ao select ativado, ou pouco mais grotesco mas fica bacana assim também.

Spoiler

<select class="meu_select">
    <option value="">Selecione</option>
    <option value="numero 1 a">Opção 1</option>
    <option value="numero 2 a">Opção 2</option>
    <option value="numero 3 a">Opção 3</option>
</select>
<select class="meu_select">
    <option value="">Selecione</option>
    <option value="numero 1 b">Opção 1</option>
    <option value="numero 2 b">Opção 2</option>
    <option value="numero 3 b">Opção 3</option>
</select>

<script>
    // A função só pode ser executada depois do documento estiver 100% carregado,
    //caso contrário ela não vai encontrar todos select com a class referente
    function mostarOpcao() {
        var elemento_classe = document.getElementsByClassName('meu_select');
        var i;
        for (i = 0; i < elemento_classe.length; i++) {
            elemento_classe[i].onchange = function () {
                alert(this.value);
            };
        }
    }

    // Iniciamos a função
    mostarOpcao();
</script>

 

 

Além disso pode-se capturar adicionando "addEventListener" ao seletores, ambém pode obter o valor por "event.target", tem mais formas só que agora não estou lembrando de cabeça.

 

#EDIT

Havia me esquecido. Se você tem uma função que cria novos selects e optar pela segunda forma que mostrei usando className ao invés de ID você deve recarregar a função toda vez que um novo select é criado.

 

Lembre-se que isso só são exemplos que você pode usar como base para desenvolver da forma que achar melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi... muito obrigado pela explicação, eu utilizei o document.queryselectorAll, e com o laço for funcionou certinho. 
Muito obrigado pela atenção! valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei dessa forma: 
function alterar(){    
 
 var input = document.querySelectorAll('.valor','.form-control');
 var sele = document.querySelectorAll('.sele','.form-control');
 
     for(var i = 0; i < sele.length;i++){ 
        if(sele.value ==1){
            input.disabled = true;            
        }
         
        if(sele.value ==4){
            input.disabled = true;            
        }
         
        if(sele.value ==8){
            input.disabled = true;            
        }
        
        if(sele.value == 2){
            input.disabled = false;
        }
        if(sele.value == 3){
            input.disabled = false;
        }

    }
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por Thiago Duarte
      Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc
       
      Alguem pode me ajudar?
    • Por belann
      Olá!
       
      Estou fazendo o upload de arquivos com fetch dessa forma
      fetch(url, {
              method: 'POST',
              headers: {'Content-Type': 'multipart/form-data',},
              body: formData 
          }).catch((error) => (console.log("Problemas com o Upload"), error));
       
      estou usando input type=file
      e criando uma const formData = new FormData(); 
      mas não faz e não dá nenhum erro.
      estou fazendo o upload com a url="http://localhost/dashboard/dados".
    • Por joeythai
      Boa tarde pessoal,
       
      Eu criei um formulário em que tenho 3 interações: evento click, change e uma chamada ajax. No evento on change ("select#removal_table_from" )eu faço uma chamada ajax onde eu passo como parametro o id do item selecionado e construo uma tabela dinamica com o próprio javascript, após isto, tenho um input em que o usuario coloca um valor de percentual para que eu possa preencher em 3 colunas da tabela que foi criada dinamicamente: moto_atualizado, carro_atualizado e caminhao_atualizado, até aí tudo bem, o codigo está fazendo isso, porém, como a tabela é criada dinamicamente eu preciso de alguma forma enviar o arrayData para meu backend mas quando faço o calculo dentro do loop apos resposta do meu ajax, os valores desses 3 campos chegam como null, não sei se é possível fazer o que pretendo ou se é ainda não sei como faz
       
      <code>
           $(document).ready(function (event) {   let arrayData = []; let percentage; let removal_vehicle; let removal_motorcycle; let removal_tuck; let apply_removal = $('#apply_removal');   // apply_removal.on('click', function () { // percentage = $('#percentage').val();   // $('.table-body tr').each(function () {   // let veiculo = $(this).find('.veiculo').text(); // let moto = $(this).find('.moto').text(); // let caminhao = $(this).find('.caminhao').text();   // let removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; // let removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; // let removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   // arrayData.push({ // removal_vehicle, // removal_motorcycle, // removal_tuck // })   // $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); // $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); // $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2)); // }); // });   apply_removal.on('click', function () { percentage = $('#percentage').val();   $('.table-body tr').each(function () {   let veiculo = $(this).find('.veiculo').text(); let moto = $(this).find('.moto').text(); let caminhao = $(this).find('.caminhao').text();   removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   arrayData.push({ removal_vehicle, removal_motorcycle, removal_tuck })   $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2));     console.log('Removal Vehicle:', removal_vehicle); console.log('Removal Motorcycle:', removal_motorcycle); console.log('Removal Truck:', removal_tuck); }); });   $('select#removal_table_from').on('change', function (e) { let table_id = $(this).val(); let action = route('removal.removal-values.show', table_id);   $.ajax({ type: "GET", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },   success: function (data) { $('.table-body').empty();   for (let i = 0; i < data.length; i++) { let carro = parseFloat(data[i].CARRO); let moto = parseFloat(data[i].MOTO); let caminhao = parseFloat(data[i].CAMINHAO); let distancia = data[i].DISTANCIA; let origem = data[i].ORIGEM; let destino = data[i].DESTINO; let localidadeOrigem = data[i].LocalidadeOrigem_ID; let localidadeDestino = data[i].LocalidadeDestino_ID;   let newRow = '<tr class="removal-row">' + '<td class="align-middle">' + '<div class="row">' + '<div class="col-1">' + '<span class="font-weight-bold">Origem</span><br>' + '<span class="origem">' + origem + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Destino</span><br>' + '<span class="destino">' + destino + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">KM</span><br>' + '<span class="km">' + distancia + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Veículo</span><br>' + '<span class="veiculo">' + carro + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Veículo Atualizado</span><br>' + '<input type="text" class="veiculo_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Moto</span><br>' + '<span class="moto">' + moto + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Moto Atualizado</span><br>' + '<input type="text" class="moto_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Caminhão</span><br>' + '<span class="caminhao">' + caminhao + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Caminhão Atualizado</span><br>' + '<input type="text" class="caminhao_atualizado">' + '</div>' + '</div>' + '</div>' + '</td>' + '</tr>';   $('.table-body').append(newRow); //let row = $('.removal-row:last');   // Calcula o valor atualizado e define nos campos diretamente // let veiculo_atualizado = carro + (carro * percentage) / 100; // let moto_atualizado = moto + (moto * percentage) / 100; // let caminhao_atualizado = caminhao + (caminhao * percentage) / 100; // console.log('PORCENTS: ', percentage); //console.log('Veiculo Atualizado:', veiculo_atualizado, 'Moto Atualizado:', moto_atualizado, 'Caminhao Atualizado:', caminhao_atualizado);   // Define os valores diretamente nos campos da nova linha // row.find('.veiculo_atualizado').val(veiculo_atualizado.toFixed(2)); // row.find('.moto_atualizado').val(moto_atualizado.toFixed(2)); // row.find('.caminhao_atualizado').val(caminhao_atualizado.toFixed(2));   arrayData.push({ carro, moto, caminhao, distancia, origem, destino, localidadeOrigem, localidadeDestino, removal_vehicle, removal_motorcycle, removal_tuck }); }   $('#copy_data_table').val(JSON.stringify(arrayData)); }   }); });   //javascript para o formulario de cadastro // $(document).ready(function (event) { $('#uf').change(function () { let code_city = $(this).val(); let deposit = localStorage.getItem('selected_deposit_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city').empty(); $('#deposit').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '<option>'); }   if (data.deposits.length > 0) { for (let i = 0; i < data.deposits.length; i++) { $('#deposit').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '<option>'); } } else { // $('#deposit').prop('disabled', true); // $('#city').prop('disabled', false); }   $('#city').trigger('change'); } });   });   $('#deposit').on('change', function () { depositId = $(this).val(); localStorage.setItem('selected_deposit_id', depositId); });   $('#uf_destiny').change(function () { let code_city = $(this).val(); let depositDestiny = localStorage.getItem('selected_deposit_destiny_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city_destiny').empty(); $('#deposit_destiny').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city_destiny').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '</option>'); }   if (data.deposits.length > 0) { // $('#deposit_destiny').prop('disabled', false); //$('#city_destiny').empty(); // $('#city_destiny').prop('disabled', true); for (let i = 0; i < data.deposits.length; i++) { $('#deposit_destiny').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '</option>'); } } else { // $('#deposit_destiny').prop('disabled', true); // $('#city_destiny').prop('disabled', false); }   $('#city_destiny').trigger('change'); } }); });   $('#deposit_destiny').on('change', function () { let depositDestinyId = $(this).val(); localStorage.setItem('selected_deposit_destiny_id', depositDestinyId); });   }); </code>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.