Jump to content
Thiago2018

SetTimeout - funciona mas não repete todas as statements da função - Erro estranho!

Recommended Posts

var objectData = new Date();

window.addEventListener('click', relogio, false);

var hora = objectData.getHours();
var minutos = objectData.getMinutes();
var segundos = objectData.getSeconds();

function relogio() {
    
    console.log("Função executada com sucesso!");

    hora = objectData.getHours();
    minutos = objectData.getMinutes();
    segundos = objectData.getSeconds();

    if(segundos < 10) {
        segundos = '0' + segundos;
    }

    if(minutos < 10) {
        minutos = '0' + minutos;
    }

    if(hora < 10) {
        hora = '0' + hora;
    }

    document.getElementById("painel").innerHTML = hora + ":" + minutos + ":" + segundos;

    setTimeout(relogio, 1000);


}

 

O código acima está repetindo corretamente. Isso é verificado no console através da mensagem "Função executada corretamente". Porém não atualiza o relógio! Como isso é possível se antes tudo foi testado e o relógio escreve na tela de boa. Alguém que enxergue onde está o erro, pode me ajudar?

Share this post


Link to post
Share on other sites

Experimenta assim:

window.onload = relogio;

function relogio() {
    var objectData = new Date();
    //console.log("Função executada com sucesso!");
    hora = objectData.getHours();
    minutos = objectData.getMinutes();
    segundos = objectData.getSeconds();
    if(segundos < 10) {
        segundos = '0' + segundos;
    }
    if(minutos < 10) {
        minutos = '0' + minutos;
    }
    if(hora < 10) {
        hora = '0' + hora;
    }
    document.getElementById("painel").innerHTML = hora + ":" + minutos + ":" + segundos;
    setTimeout(relogio, 1000);
}

 

  • Obrigado! 1

Share this post


Link to post
Share on other sites

Valeu, wootzor! O seu código funcionou! Você só esqueceu de adicionar a palavra reservada "var" antes das variáveis hora, minutos e segundos dentro da função. E também, é bom explicar o porquê de o erro estar acontecendo, para que não somente eu, mas outras pessoas possam aprender.

Obrigado pela ajuda!

Share this post


Link to post
Share on other sites

Tens razão. Retirei as variáveis globais e esqueci-me de as declarar dentro da função.

 

Tirando isso, a minha única alteração foi substituir o evento click na página pelo onload, que chama a função assim que a página é carregada.

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 Sapinn
      Opa galera tudo firmesa? Então, tenho um codigo que faz uma barra aparecer toda vez que eu role a pagina até um certo ponto e tudo funciona normal. Eu gostaria de saber se tem como fazer uma transição nessa barra para ele ir aparecendo devagarzinho com a opacidade em 0 e vai subindo até chegar a 1 coisa de um 0.8s. Não sei como fazer ou se tem como fazer preciso de ajuda.
       
      Codigo js 
       
      window.onscroll = function(){
          var top = window.pageXOffset || document.documentElement.scrollTop
          var barra = document.querySelector(".barra");
          if(top > 900){
              barra.style.display = 'flex';
      //aqui tentei adicionar uma class direto do css para fazer o efeito transition mas sem sucesso.
              barra.classList.add('transition');
          }else{
             barra.style.display = 'none';
          }
      }
       
       
      Codigo css
      .barra{
          width: 100%;
          height: 70px;
          background-color: #090b13;
          display: none;
          justify-content: space-between;
          position: fixed;
          opacity: 0;
      }
      .transition{
          transition: 1s;
          opacity: 0.7;
          
      }
       
      codigo HTML
       
      <div class="barra" >
              <img src="assets/images/logo-nopad.svg" alt="">
              <button class="botao-assinatura-header">Assine Agora</button>
        </div>
       
       
    • By henriquers
      Estou com um problema com o Select2, ele tem um campo de busca mas não esta filtrando corretamente e não estou entendo o motivo, sem utilizar o AJAX colocando os options manualmente ele funciona corretamente, mas trazendo os dados via AJAX ele não funciona o campo de busca.
      Se aguem poder me dar uma luz agradeço a ajuda.
       

       
      Nessa imagem estou tentando filtrar apenas para os itens que tenha LUVA na descrição, mas não funciona, posso colocar qual quer coisa que ele não faz o filtro
       
      Abaixo segue meu codigo
       
      HTML
      <!DOCTYPE HTML PUBLIC> <HTML> <HEAD> <TITLE> Select2 </TITLE> <link href="select2/select2.css" rel="stylesheet" type="text/css" /> <script src="https://code.jquery.com/jquery-latest.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/i18n/pt-BR.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.css" rel="stylesheet"/> <script> $(document).ready(function(){ $("#selUser").select2({ language: "pt-br", ajax: { url: "get_dados.php", type: "GET", dataType: 'json', delay: 200, data: function (params) { return { q: params.term, // search term page: params.page }; }, processResults: function (response) { return { results: response }; }, cache: true }, width: "20%", closeOnSelect: true, }); }); </script> </head> <body> <select id='selUser' style='width: 200px;'> <option value='0'>- Search user -</option> </select> </body> </html> get_dados.php
      <?php include './conn_orcl.php'; $select="SELECT PRO_CODPRO PRODUTO,TRIM(PRO_DESCRI) DESCRICAO FROM F_PRODS WHERE PRO_LOCEST='ALMOX' AND PRO_STATUS = 'AT' ORDER BY DESCRICAO"; $parse=oci_parse($conn,$select); oci_execute($parse); $data = array(); while($row=oci_fetch_array($parse)){ $data[] = array("id"=>$row['PRODUTO'], "text"=>$row['PRODUTO']." - ".$row['DESCRICAO']); }; echo json_encode($data); ob_end_flush(); oci_free_statement($parse); oci_close($conn); ?>  
    • By Jack Oliveira
      Ola pessoal bom dia 
      Bom estou tentando fazer um formulario de cadastros
      com ajax
       
      mais sempre me retorna o erro uma msg que definir caso não esteja fazendo
      Houve um erro ao fazer o seu cadastro, tente novamente!
       
       
      Mais já olhei tudo que podia não há porque dar erro pois esta sendo colocando os campos certos para cadastrar
       
      No Ajax esta da seguinte forma
      <script> $(function(){ $('.form').submit(function(){ $('.loading').html("<img src='loading.gif' width='45'>"); $.ajax({ url: '<?= ConfigPainel('site_url');?>controlers/cadastro_empresa_users.php', type: 'POST', data: $('.form').serialize(), success: function(data){ $('.mostrar').html(data); $('.loading').hide(); $('.form')[0].reset(); } }); return false; }); }); </script> no html no form fiz assim pegando a class form do ajax creio que não há nada de errado aqui
      <form action="" method="post" enctype="multipart/form-data" class="form">
       
      no php esta assim
       
      <?php header('Access-Control-Allow-Origin: *'); require_once ('../admin/database/config.php'); require_once ('../admin/database/config.database..php'); require_once ('../admin/database/config.session.php'); require_once ('../admin/includes/funcoes.php'); if($_POST){ if(empty($_POST['user_name']) || empty($_POST['user_lastname']) || empty($_POST['user_email']) || empty($_POST['user_telefone']) || empty($_POST['user_password']) || empty($_POST['user_plano']) || empty($_POST['nome_empresa']) || empty($_POST['nome_empresa_link'])){ echo '<script> $(document).ready(function(){ swal("Ops...","Preencha todos os campos obrigatórios!","warning"); }); </script>'; }else{ // INICIO PASSANDO PARA ARRAY DO USUARIO. $user_name = post('user_name'); $user_lastname = post('user_lastname'); $user_email = post('user_email'); $user_telefone = post('user_telefone'); $user_password = md5(post('user_password')); $user_plano = post('user_plano'); $user_level = 3; $user_registration = date('Y-m-d H:i:s'); // FIM ARRAY DO USUARIO. $QueryC = DBRead('configuracoes_site','*'); if (is_array($QueryC)) { foreach ($QueryC as $CONF) { //Teste $DiasDeTeste = $CONF['dias_testes']; //Plano 1 $nome_plano_um = $CONF['nome_plano_um']; $v_plano_um = $CONF['v_plano_um']; $dias_plano_um = $CONF['dias_plano_um']; //Plano 2 $nome_plano_dois = $CONF['nome_plano_dois']; $v_plano_dois = $CONF['v_plano_dois']; $dias_plano_dois = $CONF['dias_plano_dois']; //Plano 3 $nome_plano_tres = $CONF['nome_plano_tres']; $v_plano_tres = $CONF['v_plano_tres']; $dias_plano_tres = $CONF['dias_plano_tres']; }} //INICIO PASSANDO PARA ARRAY DA EMPRESA $nome_empresa = post('nome_empresa'); $nome_empresa_link = post('nome_empresa_link'); $end_uf_empresa = post('end_uf_empresa'); $cidade_empresa = post('cidade_empresa'); $end_bairro_empresa = post('end_bairro_empresa'); $end_rua_n_empresa = post('end_rua_n_empresa'); $email_empresa = post('user_email'); $telefone_empresa = preg_replace("/[^0-9]/", "", post('user_telefone')); $empresa_data_renovacao = date("Y-m-d", strtotime("+{$DiasDeTeste} days")); $QueryE = DBRead('estados','*',"WHERE id='{$end_uf_empresa}'"); if (is_array($QueryE)) { foreach ($QueryE as $ES) { $uf_empresa = $ES['sigla']; }} $QueryU = DBRead('ws_users','*',"WHERE user_plano='{$user_plano}'"); if (is_array($QueryU)) { foreach ($QueryU as $USER) { $UserPlano = $USER['user_plano']; }} switch ($UserPlano) { case '1': $Planos = $nome_plano_um; $Valor = 'R$:'.$v_plano_um.''; $Dias = 'Assinatura de '.$dias_plano_um.' dias'; break; case '2': $Planos = $nome_plano_dois; $Valor = 'R$:'.$v_plano_dois.''; $Dias = 'Assinatura de '.$dias_plano_dois.' dias'; break; case '3': $Planos = $nome_plano_tres; $Valor = 'R$:'.$v_plano_tres.''; $Dias = 'Assinatura de '.$dias_plano_tres.' dias'; break; default: $Planos = 'Plano Teste'; $Valor = 'Bônus R$: 21,00'; $Dias = 'Assinatura de '.$empresa_data_renovacao.' dias grátis'; break; } $Adicionar = array( 'user_name' => $user_name, 'user_lastname' => $user_lastname, 'user_email' => $user_email, 'user_telefone' => $user_telefone, 'user_password' => $user_password, 'user_plano' => $user_plano, 'user_level' => 3, 'user_registration' => $user_registration ); $Query = DBCreate('ws_users', $Adicionar); $Adicionar = array( 'nome_empresa' => $nome_empresa, 'nome_empresa_link' => $nome_empresa_link, 'end_uf_empresa' => $uf_empresa, 'cidade_empresa' => $cidade_empresa, 'end_bairro_empresa' => $end_bairro_empresa, 'end_rua_n_empresa' => $end_rua_n_empresa, 'email_empresa' => $email_empresa, 'telefone_empresa' => $telefone_empresa, 'empresa_data_renovacao' => $empresa_data_renovacao ); $Query = DBCreate('ws_empresa', $Adicionar); if ($Query != 0) { echo' <script> $(document).ready(function(){ swal("Ops '.utf8_encode($user_name).'...","Houve um erro ao fazer o seu cadastro, tente novamente!", "error"); }); </script>'; }else{ echo' <script> $(document).ready(function(){ swal("Sucesso '.utf8_encode($user_name).'...", "Seu cadastro foi realizado com sucesso.<br><a href="./login/Acessar"><button class="btn btn-default btn-sm"></button>Fazer Login...</a>", "success") }); </script>'; } } } Posso esta deixando passar algo no php que não estou vendo o problema....
    • By karleonel
      <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> .conteudo{ text-align: justify-all; } .texto{ font-family: Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: bold; text-align: justify; } .titulo{ text-align: center; } </style> </head> <body id="minhaPagina"> <div class="conteudo"> <h1 class="titulo"></h1> <p class="texto"></p> <label for="digite">Digite a palavra:</label> <input name="campo" type="text" size="20" maxlength="6" /><br><br> <button type="button" onclick="VPalindromo('fcampo')" >Validar Palíndromo</button> </div> <script> function VPalindromo(str) { //var str = document.getElementByID("fcampo").value; var er = /[\W]/g var smallStr = str.toLowerCase().replace(er, ""); var x = smallStr.split("").reverse().join(""); if (x == smallStr) { alert("É um palindromo.") } else{ alert("Não é um palindromo.") } } </script> </body> </html> Pessoal,
       
      Eu fiz este código utilizando expressões regulares mas ao tentar validar ele sempre dá reposta como falsa.
      <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> .conteudo{ text-align: justify-all; } .texto{ font-family: Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: bold; text-align: justify; } .titulo{ text-align: center; } </style> </head> <body id="minhaPagina"> <div class="conteudo"> <h1 class="titulo"></h1> <p class="texto"></p> <label for="digite">Digite a palavra:</label> <input name="campo" id="fcampo" type="text" size="20" maxlength="6" /><br><br> <button type="button" onclick="VPalindromo()" >Validar Palíndromo</button> </div> <script> function VPalindromo(str) { var er = /[\W]/g var smallStr = str.toLowerCase().replace(er, ""); var x = smallStr.split("").reverse().join(""); if (x == smallStr) return true; return false; } </script> </body> </html>  
    • By joagostini
      Olá, sou iniciante, e estou fazendo, como exercício, o jogo da velha. 'Desenvolvi' uma rotina de escolha de nível do jogo (serão 3 níveis) que deve aguardar a escolha do usuário para o programa prosseguir. Mas acho que não entendi direito como o javascript funciona, pois o que fiz não funciona e não encontrei uma solução (talvez não saíba como pesquisar corretamente o assunto na web).

      O começo do HTML (que é pouco) onde está um select para escolha do nível é este:
      <body>     <div id="dvmenu">         <button onclick="iniciar()">Iniciar Jogo</button>         <p><br></p>         <div id="dvQuemComeca">             <label for="nivel">Escolha o nivel:</label>             <select id="nivel" onChange='atualiza()'>                 <option value=0 selected>Escolha um nível</option>                 <option value=1>Nível 1 - Brincadeira</option>                 <option value=2>Nivel 2 - Surpresa</option>                 <option value=3>Nível 3 - Desafio</option>             </select>         </div>         <div id="jogador" class="jogador"></div>         <div id="vencedor" class="jogador"></div>     </div>  
      O código JS é este:
      //INÍCIO VEM DE LOAD function iniciar() {     casela = document.querySelectorAll('div[id^="p"]');     for (let cas of casela) {         cas.innerHTML = '';     }     for (let i = 0; i < 9; i++){        tab = tab;     }     console.log(tab);     nivel = 0;      msg = '';     qtosLancesJog = 0;     sorteiaJogador();     //até aqui funcionou direito } //-------------------------------------------------------------------- //ESCOLHA DO NÍVEL DO JOGO function atualiza(){     let selecao = document.querySelector('#nivel');     let opcao = selecao.options[selecao.selectedIndex];     return opcao.value;    }   //--------------------------------------------------------------------   //SORTEIA QUEM VAI COMEÇAR JOGANDO //função para definir o jogador que inicia o tab function sorteiaJogador() {//funcionou direito     let quemComeca = parseInt(Math.floor(Math.random() * 2));     if (quemComeca == 0) {         msg = 'Computador';         //setTimeout(lanceCpu, 2000);//dá um intervalo antes do computador realizar o 1 lance         lanceCpu();     } else msg = 'Humano';//neste caso a rotina espera que o jogador clique no tabuleiro, qdo roda a função lancetab(pos)         lanceHumano();     document.querySelector('#jogador').innerHTML = `<br>O ${msg} começa!`; } //--------------------------------------------------------------------   //ESCOLHA RANDÔMICA, NIVEL = 1, Da POSIÇÃO DO LANCE DA CPU NO tabULEIRO function jogouCpu(){//funcionou direito //nível 1 modo randômico pos = Math.floor(Math.random() * 9); return pos; }   //função humana function lanceHumano(){     console.log('Estou na função humana');     do {         nivel = atualiza();         console.log(nivel);     } while (nivel === 0);     console.log(nivel + ' passei direto'); }  
      O problema está nesse do...while da function lanceHumano(). Segundo entendi, ele prosseguiria apenas quando nivel!== 0, caso contrário, ficaria 'preso' até o momento que o usuário escolhesse uma das opções. Pelo HTML percebesse que setei o select para value=0. Mas ele nem se dá ao trabalho de esperar um miléssimo de segundo, segue em frente com o valor que tiver, no caso 0. O while  não tem efeito. Essa minha perspectiva está errada? Se sim, o que fazer? (paradigma funcional, await?) Obrigado.
      P.S.. No código tem uns conole.logs que servem watch-dogs para ajudar a entender por onde vão as rotinas.
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
×

Important Information

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