Ir para conteúdo

Arquivado

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

Luiz Gustavo Costa Ceolin

Problemas com classe de multiselect

Recommended Posts

Bom dia. Eu tenho uma pesquisa de cidades dependendo das UFs selecionadas. Quando o usuário seleciona uma ou mais UF, o sistema gera uma busca instatania na tabela das cidades com as UFs selecionadas e retorna a resposta por meio de um Response::json. Para fazer essa busca instatania e anexar as cidades selecionadas no select das UFs eu utlizo um script em JS.

Segue o JS para a busca.

$('select[id=uf]').change(function () { // ativa a função quando é selecionado uma UF pelo id = uf
      var uf = $(this).val(); // recebe o valor da UF
      
      $.get('/get-cidades', {uf : uf}, function (busca) { // redireciona para o controller do sistema e recupera as cidades
          $('select[name=cidades]').empty(); // procura o campo com o name = cidades
          $.each(busca, function (key, value) {
              $('select[name=cidades]').append('<option value=' + value.id + '>' + value.name + '</option>'); // anexa os options no select das cidades
          });
        // tentei anexar a classe do multiselect aqui
      });
  });

A questão é que o campo das cidades é de multipla escolha, então para não deixar o campo com o estilo padrão do HTML, eu utilizo uma classe do jquery. Quando incluo a classe no campo, os valores que antes eram listados corretamente no select da cidades, não aparecem mais na tela.

Classe jquery.

$('#cidades').multiselect({
    numberDisplayed: 0,
    includeSelectAllOption: true,
  });

Eu também tentei anexar a classe do multiselect onde identifiquei no JS, foi onde consegui mostrar as cidades dentro da classe, porém com 1 erro, ele só leva em consideração a minha primeira escolha, exemplo: seleciono UF SC, filtra as de SC dentro da classe corretamente, mas se em seguinda eu selecionar a UF de RS, ainda continua mostrando as de SC e não mostra a de RS. Mas caso eu retirar a classe, filtra tudo corretamente..

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Rapadura, eu já consigo linkar o jquery no select, minha questão é que quando eu estou com o select já com o jquery, os dados que eram para serem retornados dentro do select, não são recuperados. Vou colocar uma imagem da situação.

screenshot.3.jpg.fe18130151396f2f606b5ebbb828c10d.jpg

Aqui seleciono os 2 estados e são retornados no select os valores corretamente, porém o select das cidades está sem o jquery

 

screenshot.4.jpg.c56e9746f5052d3a28d703198788f08f.jpg

Agora o campo das cidades com o jquery , porém não é retornado nenhuma cidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta fazer assim então:

$.get('/get-cidades', {uf : uf}, function (busca) { // redireciona para o controller do sistema e recupera as cidades
      var selectCidades = $('select[name=cidades]'); 
      selectCidades.empty(); // procura o campo com o name = cidades
  	  var options = '';
      $.each(busca, function (key, value) {
        options += '<option value=' + value.id + '>' + value.name + '</option>';
  	  });
      selectCidades.html(options);
      selectCidades.multiselect();
});

O caramba não sei se tinha campos antes, se tiver usa append mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo desse modo, eu encontro um problema que havia ocorrido antes. Ele retorna os dados para o select com o jquery corretamente, porém se eu vou utilizar outra busca, exemplo: Selecionei SC, filtra os casos de SC aí vou mudar para RS, ele continua filtrando os casos de SC.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o seu select cidade estiver com o change, deixa desse jeito então:

//TROCA ISSO
$('select').change(function(){});

//POR ISSO
$('select').on('change',function(){}); 

Acabaram minhas idéias rsrs... boa sorte!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso como você está usando jQuery deve ser o appendTo(). mas é estranho, você pode tentar com esses 3:

 

$('select[name=cidades]').html('<option></option>');
$('<option></option>').appendTo('select[name=cidades]');
$('select[name=cidades]').append('<option></option>');

tentar usar o change como delegation tipo:

$('#container-do-select').on('change','seu-seletor-aqui',function(){
   //executa seu evento
})

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda n entendi o objectivo do uso do multiselect na real.

 

Seria selecionar uma cidade a partir de um estado?

Precisa de + de 1 ajax pra isso não...

 

Se liga no Js-Vanilla:

http://gabrieldarezzo.github.io/desafiosInternos/select/index.html

 

Ou Versão jQuery

http://gabrieldarezzo.github.io/desafiosInternos/select/jquery.html

 

 

Ouuuuuuuuuu....

Seria selecionar +1 de um estado ao mesmo tempo ?

 

Se você não está se dando bem com o plugin jquery, opções é q não faltam...

 

Opção:

https://select2.github.io/

 

Outra Opção:

https://harvesthq.github.io/chosen/

Compartilhar este post


Link para o post
Compartilhar em outros sites

O objetivo de utilizar o muliselect é que você pode selecionar mais de uma cidade. O problema ocorre apenas quando vou estilizar o campo com uma classe do jquery, aí os dados que antes eram retornados para o campo sem o estilo, não são mais retornados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por acaso você conhece outras classes para multiselect? Essa do select2 eu não gostei muito, pois quando seleciona uma opção ele fica marcando o nome dela e como no meu sistema são várias opção acaba ficando feio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No próprio site do jQuery,você pode pesquisar por plugins:

https://plugins.jquery.com/?s=select

https://plugins.jquery.com/?s=mult+select

 

Tenta procurar por la.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, acabei "Resolvendo" aquela minha primeira dúvida com o multiselect do jQuery. Toda vez que o usuário seleciona uma opção, ele destroy o multiselect, joga os options e em seguida ativa novamente um outro multiselect.

Código ficou assim.

$('select[name=uf]').on('change', function () { // ativa quando selecionar uma UF
  $('select[name=comarca_id]').multiselect('destroy'); // destroy o multiple select existente
  var uf = $(this).val();
  $.get('/judicial/get-cidades/' + uf, function (busca) { // buscando as cidades pela rota get-cidades + uf
      $('select[id=comarca_id]').empty(); // esvaziando os options das comarcas
      $.each(busca, function (key, value) {
          $('select[id=comarca_id]').append('<option value=' + value.name + '>' + value.name + '</option>'); // inserindo os options com as cidades
      });
    $('select[name=comarca_id]').multiselect(); // ativando o multiselect no campo após fazer todo o carregamento das cidades
  });  });

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Estou com um problema de cálculo que não estou conseguindo resolver.
       
      Tenho uma rotina em Javascript que faz o seguinte cálculo qtde x vrUnit = total.
       
      qtde   x  vrUnit    =    total
      1,23   x  1,00       =    1,23    << até aqui tudo bem.
       
      o problema seria fazer o arredondamento para cima para impedir de fazer este cálculo:
      0,01 x 0,01 = 0,0001
       
      para digitar o valor estou utilizando esta função:
       
      /*Esta função quando o usuário digitar o valor aparece * 1,23 */ function formataDigitacao(i) { //Adiciona os dados para a másrcara var decimais = 2; var separador_milhar = '.'; var separador_decimal = ','; var decimais_ele = Math.pow(10, decimais); var thousand_separator = '$1'+separador_milhar; var v = i.value.replace(/\D/g,''); v = (v/decimais_ele).toFixed(decimais) + ''; var splits = v.split("."); var p_parte = splits[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, thousand_separator); (typeof splits[1] === "undefined") ? i.value = p_parte : i.value = p_parte+separador_decimal+splits[1]; } /*Esta função faz a multiplicação entre Valor Unitário X Quantidade *faz a multiplicação correta */ function calcProd(){ //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Obter valor digitado do produto var valor_unit = document.getElementById("vlrunit").value; //Remover ponto e trocar a virgula por ponto while (valor_unit.indexOf(".") >= 0) { valor_unit = valor_unit.replace(".", ""); } valor_unit = valor_unit.replace(",","."); //Calcula o Valor do Desconto if (valor_unit > 0 && prod_qtde > 0) { calc_total_produto = (parseFloat(valor_unit) * parseFloat(prod_qtde)); var numero = calc_total_produto.toFixed(2).split('.'); //<<== aqui faço o arredondamento das casas decimais de 1,234 p/ 1,23 numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("vlrtotal").value = numero.join(','); } else { if (valor_unit > 0) { document.getElementById("vlrtotal").value = document.getElementById("vlrunit").value; } else { document.getElementById("vlrtotal").value = "0,00"; } } } Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida e não estou conseguindo resolver.
       
      Tenho um SELECT onde eu pego o ID e NOME_CAMPO, até aqui tudo bem.
       
      Para evitar erros de saída de produtos por estoque, preciso passar o ID do Centro de Custo, para gerar a Tabela de produtos em estou por cada centro de Custo.

      Exemplo:
      Centro de Custo 1 - tem:
      produto A | produto B | produto C

      Centro de Custo 2 - tem:
      produto D | produto E

      Como consigo pegar via JAVASCRIPT o código do Centro de Custo selecionado e passar para a Controller, para chamar a MODAL ?

      meu código está assim:
      VIEW
       
      <div class="col-md-6"> <label for="deptsOrigem">Dpto Origem:</label> <div class="input-group mb-3"> <input type="hidden" name="idCentrocusto" id="idCentrocusto"> <input type="text" class="form-control" id="nameCentrocusto" name="nameCentrocusto" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por Centro de Custo" disabled> <span class="input-group-btn"> <button class="btn btn-primary" type="button" id="btnOrgn" name="btnOrgn" data-toggle="modal" data-target="#modal_deptsOrigem" > <span class="fa fa-search"></span> Buscar </button> </span> </div> </div> <div class="modal fade" id="modal_deptsOrigem"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header" style="font-size:18px; color:#ffffff; background:#307192;"> <h4 class="modal-title"><strong>Lista do(s) Centro de Custo(s)</strong></h4> </div> <div class="modal-body"> <table id="deptsLista" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center;">Código</th> <th style="text-align:center;">Centro de Custo(s)</th> <th style="text-align:center;">Ação</th> </tr> </thead> <tbody id="itensDeptos"> <!---Monta Tabela VIA Ajax---> </tbody> </table> </div> <div class="modal-footer justify-content-center" style="background:#BBAAAA;"> <button type="button" class="btn btn-danger pull-center" data-dismiss="modal">Voltar</button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div>  
      o JAVASCRIPT está assim:
       
      //Função para Chamar o Centro de Custo que o usuário deseja. listaDeptos(); var table = $('#deptsLista').dataTable({ "searching": true, "ordering": true, "info": true, "autoWidth": false, "pageLength": 5, "lengthMenu": [ 5, 10, 25, 50 ], "responsive": true, }); // list all employee in datatable function listaDeptos(){ $.ajax({ type : 'ajax', url : '<?=base_url()?>estoque/consumo/deptsList/', async : false, dataType : 'json', success : function(data){ var html = ''; var i; for(i=0; i<data.length; i++){ var datadpts = data[i].idDepartamento+"*"+data[i].departamento; html += '<tr>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].idDepartamento+'</td>'+ '<td width="50%" style="text-align:left; font-size:16px;">'+data[i].departamento+'</td>'+ '<td width="10%" style="text-align:center;">'+ '<button type="button" class="btn btn-success btn_orgns" style="margin-right: 1%; padding: 2px 5px;" title="Selecionar Departamento" value="'+datadpts+'"><span class="fa fa-check"></span></button>'+ '</td>'+ '</tr>'; } //Fim - For $('#itensDeptos').html(html); } //Fim - success }); //Fim - ajax } //Fim - function /*---Função para Capturar o Departamento selecionado---*/ $(document).on("click",".btn_orgns",function(){ dpts = $(this).val(); infodpts = dpts.split("*"); $("#idCentrocusto").val(infodpts[0]); $("#nameCentrocusto").val(infodpts[1]); $("#modal_deptsOrigem").modal("hide"); //Função para Atualizar o Status do Botão statusPesqProd(); }); //Função para Gerar a Lista de Produtos por Centro de Custo via AJAX. listaProduts(); var table = $('#prdsLista').dataTable({ "searching": true, "ordering": true, "info": true, "autoWidth": false, "pageLength": 5, "lengthMenu": [ 5, 10, 25, 50 ], "responsive": true, }); // list all employee in datatable function listaProduts(){ $.ajax({ type : 'ajax', url : '<?=base_url()?>estoque/consumo/produtsList/', //< como passo aqui o ID do Centro de Custo Selecionado para Gerar a Lista de Produtos async : false, dataType : 'json', success : function(data){ var html = ''; var i; for(i=0; i<data.length; i++){ var prds = data[i].idProdutos+"*"+data[i].cod_interno+"*"+data[i].descricao+"*"+data[i].prd_unid+"*"+data[i].estoque_atual; html += '<tr>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].cod_interno+'</td>'+ '<td width="50%" style="text-align:left; font-size:16px;">'+data[i].descricao+'</td>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].prd_unid+'</td>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].estoque_atual+'</td>'+ '<td width="12%" style="text-align:center;">'+ '<button type="button" class="btn btn-success btn-prod" style="margin-right: 1%; padding: 2px 5px;" title="Selecionar Produto" value="'+prds+'"><span class="fa fa-check"></span></button>'+ '</td>'+ '</tr>'; } //Fim - For $('#itensProds').html(html); } //Fim - success }); //Fim - ajax } //Fim - function  
      a CONTROLLER está assim:
      //Função para Criar Lista - Produtos Data Tables com AJAX function produtsList(){ $data = $this->consumo_model->prodsList(); echo json_encode($data); }  
       
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma pequena dúvida, referente a PEGAR AUTOMATICAMENTE a HORA e alimentar o campo INPUT.
       
      Tenho uma rotina, que estava aparentemente funcionando corretamente, mas agora estou tendo problema.
       
      A rotina, pega a HORA atual e informa automaticamente o INPUT, não estou entendendo porque agora não está mais fazendo.

      Abaixo a rotina.

       
      <div class="col-lg-3"> <label for="cotaHrsinicio">Hora da Abertura<span class="required">*</span></label> <div class="controls"> <input type="time" id="cotaHrsinicio" name="cotaHrsinicio" class="form-control" style="width:100%;" value="" /> <!-- NESSE INPUT A ROTINA INFORMA A DATA ATUAL --> </div> </div>  
       
      function date_time() { var date = new Date(); //var am_pm = "AM"; var hour = date.getHours(); /* if(hour>=12){ am_pm = "PM"; } */ if (hour == 0) { hour = 12; } if(hour<12){ hour = hour - 12; } if(hour>12){ hour + 12; } if(hour<10){ hour = "0"+hour; } var minute = date.getMinutes(); if (minute<10){ minute = "0"+minute; } var sec = date.getSeconds(); if(sec<10){ sec = "0"+sec; } /* *Formato da Hora (h:m:s) * Passar para a Variável: Hora Atual */ var cotaHrsinicio = document.getElementById("cotaHrsinicio").value = hour+":"+minute; }
      Grato,
       
      Cesar

       
    • Por luiz monteiro
      Bom dia.
      Estou precisando formatar um campo de entrada type text somente para numero com a seguinte formatação.
      se menor que 999 mostrar dessa forma mesmo, nesse caso seria para centena.dezena.unidade. Tipo 001 até 009 depois 010 até 099 depois 100 até 999
      de 1.000 até 999.999  mostrar com o ponto, nesse caso seria para milhar.centena.dezena.unidade. Tipo 001.000 até 001.999 e assim por diante.
      de 1.000.000 até 9.999.000, nesse caso seria para milhão.milhar.centena.dezena.unidade. aqui mesma ideia....
      Parecidos com aqueles campos de preço, que ao digitar os zeros ficam a esquerda até o valor atingirem a unidade correspondente.
       
      Tentei adaptar esse que encontrei na net.
      function moeda(a, e, r, t) { let n = "" , h = j = 0 , u = tamanho2 = 0 , l = ajd2 = "" , o = window.Event ? t.which : t.keyCode; if (13 == o || 8 == o) return !0; if (n = String.fromCharCode(o), -1 == "0123456789".indexOf(n)) return !1; for (u = a.value.length, h = 0; h < u && ("0" == a.value.charAt(h) || a.value.charAt(h) == r); h++) ; for (l = ""; h < u; h++) -1 != "0123456789".indexOf(a.value.charAt(h)) && (l += a.value.charAt(h)); if (l += n, 0 == (u = l.length) && (a.value = ""), 1 == u && (a.value = "0" + r + "0" + l), 2 == u && (a.value = "0" + r + l), u > 2) { for (ajd2 = "", j = 0, h = u - 3; h >= 0; h--) 3 == j && (ajd2 += e, j = 0), ajd2 += l.charAt(h), j++; for (a.value = "", tamanho2 = ajd2.length, h = tamanho2 - 1; h >= 0; h--) a.value += ajd2.charAt(h); a.value += r + l.substr(u - 2, u) } return !1 } Mas sem sucesso.
       
      Grato por enquanto.
       
       
       
    • Por Giovanird
      O script abaixo atualiza a página (centro.php) a cada um minuto e dentro desta página terei uma div que não poderá ser atualizada.
      Tentei colocar esta div como pagina com setInterval de 100 minutos porem ao dar o refresh no centro.php  tudo vai junto.  Será que isto é possivel?

      Desde já meu muito obrigado!
      <script> function atualiza(){ var url = 'centro.php'; $.get(url, function(dataReturn) { $('#centro').html(dataReturn); }); } setInterval("atualiza()",60000); </script>  

×

Informação importante

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