Ir para conteúdo

Arquivado

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

Guilherme Luiz

Script não executa em Tabs do Bootstrap

Recommended Posts

Olá,

 

Possuo uma pagina com um painel e duas tabs pelo Bootstrap.

Nessa pagina especifico um periodo de datas para imprimir um relatório.

 

No tab 1
Possuo apenas dois inputs do tipo date e um button

Ao selecionar a data possuo um evento Onclick no button que passa os values dos inputs para uma função que carrega no tab_2 os resultados via Ajax.

 

No tab 2

Imprimo diversos resultados do banco de dados em php.

Porem, nesse tab_2, nem um "misero" alert() em javascript funciona.

No console não gera nenhum erro ou warning.

 

Html 

  <!-- ### SELECIONA DATA ### -->
  <div class="tab-content"> 
    <div role="tabpanel" class="tab-pane conteudo active" id="area_1">
    	<div class="col-lg-12 col-md-12 col-xs-12">
    	<center>
        
        <div class="alert alert-info" role="alert">
        	<p><h4><b>ATENÇÃO:</b></h4></p>
            <p>Somente vendas referente ao ano de <b>2017</b> é que estão disponíveis</p>
        </div>    
            <div class="form-inline">
            <div class="input-group input-group-lg">
  			<span class="input-group-addon" data-toggle="tooltip" data-placement="top" title="Data inicial da consulta"><i class="glyphicon glyphicon-calendar"></i></span>
 			 <input type="date" class="form-control" style="border-radius: opx" name="inicial" id="inicial">
			</div>
            
            <div class="input-group input-group-lg input-data hidden-xs">
  			<span class="input-group-addon">ATÉ</span>
			</div>
                      
            <div class="input-group input-group-lg">
            <input type="date" class="form-control" style="border-radius: 0px" name="final" id="final">
  			<span class="input-group-addon" data-toggle="tooltip" data-placement="top" title="Data final da consulta"><i class="glyphicon glyphicon-calendar"></i></span>
 			</div>
            </div>
            
<br />
<br />
            <a class="btn btn-success btn-block" href="#area_2" id="next_2" aria-controls="area_2" role="tab" data-toggle="tab" onclick="mostraConteudo('lista_relatorio.php?filtro=mensal&inicial='+document.getElementById('inicial').value+'&final='+document.getElementById('final').value,'show_report');">Carregar análise <i class="glyphicon glyphicon-circle-arrow-right"></i></a>     
		</center> 
        </div> 
    </div>
    <!-- ### FIM - SELECIONA DATA ### -->
    
<!-- ############################################################################# -->
    
    <!-- ### RELATÓRIO VENDAS ### -->
	<div role="tabpanel" class="tab-pane conteudo fade" id="area_2">
		<div id="show_report"></div> <!-- div onde dados da pesquisa ajax é carregada -->
	</div>     
    <!-- ### FIM - RELATÓRIO VENDAS ### -->
   
    
<!-- ############################################################################# -->

No arquivo lista_relatorio.php é onde imprimo diversos dados de acordo com a data.

Porem, neste arquivo, nem um simples alert() é apresentado.

 

Alguem alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá guilherme Luis

 

Não entendi muito bem 

 

Este arquivo lista_relatorio.php é chamado via ajax ? Se sim é normal que não mostre o alert....

 

O teu código ajax está a funcionar bem tens a certeza?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Vitor,

 

Exato! o arquivo lista_relatório é chamado via ajax com atributos recebidos via GET do onclick do meu html como mostrei no código acima.

 

E todo e qualquer script, mesmo um alert() não é executado nele... isso tem alguma forma de resolver?

Arquivos chamados via ajax não conseguem executar scripts neles?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Guilherme então vamos por partes...

 

O que acontece é que quando a requisição é feita por ajax num método que retorna um é ActionResult/PartialViewResult é retornado o objeto e não o HTML que é gerado quando se é feita uma requisição normal(por url).

 

Tudo depende do que queres fazer...

 

Podes Postar o código de ajax que estás a utilizar para te poder ajudar melhor ?

 

Ou seja todas tudo o que está no teu ficheiro lista_relatorio.php nada vai ser mostrado, o post via ajax não serve para isso , serve sim para executares um arquivo php 

 

Aconselho-te a estudar melhor esta função...

Vou deixar um link:

https://www.w3schools.com/jquery/jquery_ajax_get_post.asp

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O script que utilizo para o ajax não sei quem é o autor e eu realizei somente a criação da função para passar os dados da url e da div de resultado

 

var xmlhttp = null;
// Conexão via XmlHttp
try {
    xmlhttp = new XMLHttpRequest();
} catch(ee) {
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(E) {
            xmlhttp = false;
        }
    }
}
    
function mostraConteudo(url, div) {
    // Seleciona objeto
    obj_div = document.getElementById(div);
       // Verifica se existe xmlhttp
       if (xmlhttp) {    
           if(xmlhttp.readyState != 1){    
            xmlhttp.open("POST", url, true);
            xmlhttp.onreadystatechange = function() {
                   // Verifica estado da requisição
                if (xmlhttp.readyState == 1) {
                    obj_div.innerHTML = "Aguarde ...";
                } else if (xmlhttp.readyState == 4) {
                    // Verifica status da requisição
                    if (xmlhttp.status == 200) {
                        obj_div.innerHTML = xmlhttp.responseText;
                    } else {
                        obj_div.innerHTML = "Erro ao carregar ...";
                    }
                }
            }
           }
       }
       xmlhttp.send(null);
}

Infelizmente, não consigo reduzir este codigo com o uso do jQuery porque o dono do projeto não quer.

Além disso, como os resultados das pesquisas são em TABs do bootstrap o uso convencional de um SUBMIT ficou "descartado" já que tudo ficaria "mais dificil" para poder aplicar submit e mostrar o TAB de resultados.

 

O que estou precisando é aplicar alguns scripts dentro de lista_relatório.php de acordo com os resultados da busca, mas como disse, nem um simples alert() é executado e como você mesmo disse @Vitor Mendes o código não é executado devido o retorno do objeto e não do html.

 

Entretanto, há como resolver isso?

Em outras paginas, com o mesmo fluxo de pesquisa e códigos eu consigo carregar MODALs e TOLLTIPs do bootstrap normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Mostrar o alert() no script para o qual é feito o request acho que é impossivel não é umas questão de ele não "ler" o javascript é uma questão que ele retorna algo...

 

Se quiseres mostrar o alert tens de o meter na pagina onde está a função jquery e não na outra pagina ..

 

Faz esse teste abaixo ...

 

 
    xmlhttp.open("POST", url, true);
    xmlhttp.onreadystatechange = function() {
                   // Verifica estado da requisição
                if (xmlhttp.readyState == 1) {
                    obj_div.innerHTML = "Aguarde ...";
                } else if (xmlhttp.readyState == 4) {
                    // Verifica status da requisição
                    if (xmlhttp.status == 200) {
                        
                                            // repara que ele aqui vai mostrar o vamor que foi retornado o conteudo que foi retornado do outro ficheiro...
                      obj_div.innerHTML = xmlhttp.responseText;
                      	
                     
                      alert(xmlhttp.responseText); // Acrescenta o alert aqui e mostra o diz o que ele mostra...
                      
                     
                      
                    } else {
                        obj_div.innerHTML = "Erro ao carregar ...";
                    }
                }
       }
  }

 

Lê os comentário que fiz e diz qualquer qualquer coisa

 

 

Estive a ver também que tens um erro no código que pode ser por isso que não esteja a funcionar ....

 

function mostraConteudo(url, div) {
    // Seleciona objeto
   var obj_div = document.getElementById(div);
       // Verifica se existe xmlhttp
       if (xmlhttp) {    
           if(xmlhttp.readyState != 1){    
            xmlhttp.open("POST", url, true);
            xmlhttp.onreadystatechange = function() {
                   // Verifica estado da requisição
                if (xmlhttp.readyState == 1) {
                    obj_div.innerHTML = "Aguarde ...";
                } else if (xmlhttp.readyState == 4) {
                    // Verifica status da requisição
                    if (xmlhttp.status == 200) {
                        obj_div.innerHTML = xmlhttp.responseText;
                    } else {
                        obj_div.innerHTML = "Erro ao carregar ...";
                    }
                }
            }
           }
       }
       xmlhttp.send(null);
}

 está ai o código corrigido a variável obj_div não estava declarada ...

 

 

 

 

 

Abraço

 

Vítor Mendes

 

 

 

 

 

 

 

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.