Jump to content
rnicson

Não consigo passar uma variável global pra fora da função no Javascript

Recommended Posts

Boa tarde Estou com um problema para passar valores de uma variável dentro de uma função pra fora pois preciso usar em outro arquivo.

Eu consegui passar os valores dela usando localStorage.setItem('lineCount) dentro da função e recuperando fora com getItem,mas isso não me serve pois está sendo criado cookies e quando eu retorno a fase do game para fazer novamente ele não me traz o valor novo e sim o anterior,a não ser que eu de um CTRL+R para limpar o cache.

Tentei também criar o cookie e pegar após isso excluir usando removeItem mas parece que ele está excluindo antes de pegar com isso não me exibe valor nenhum.

Eu preciso que o valor da variável seja lido de fora da função mas sempre está retornando undefined todos os valores de variáveis que estão dentro dessa função.

Já tentei retirar o var,já tentei usar o window. Mas não funciona.

BlocklyDialogs.congratulations = function() {
  var content = document.getElementById('dialogDone');

  // Add the user's code.
  if (BlocklyGames.workspace) {
    var linesText = document.getElementById('dialogLinesText');
    linesText.textContent = '';
    // Line produces warning when compiling Puzzle since there is no JavaScript
    // generator.  But this function is never called in Puzzle, so no matter.
    var code = Blockly.JavaScript.workspaceToCode(BlocklyGames.workspace);
    code = BlocklyInterface.stripCode(code);
    var noComments = code.replace(/\/\/[^\n]*/g, '');  // Inline comments.
    noComments = noComments.replace(/\/\*.*\*\//g, '');  /* Block comments. */
    noComments = noComments.replace(/[ \t]+\n/g, '\n');  // Trailing spaces.
    noComments = noComments.replace(/\n+/g, '\n');  // Blank lines.
    noComments = noComments.trim();
    var lineCount = noComments.split('\n').length;
    variavel_global = noComments.split('\n').length;
    var pre = document.getElementById('containerCode');
    pre.textContent = code;
    if (typeof prettyPrintOne == 'function') {
      code = pre.innerHTML;
      code = prettyPrintOne(code, 'js');
      pre.innerHTML = code;
    }
    if (lineCount == 1) {
      var text = BlocklyGames.getMsg('Games_linesOfCode1');
    } else {
      var text = BlocklyGames.getMsg('Games_linesOfCode2')
          .replace('%1', String(lineCount));
    }
    linesText.appendChild(document.createTextNode(text));
  }



  if (BlocklyGames.LEVEL < BlocklyGames.MAX_LEVEL) {
    var text = BlocklyGames.getMsg('Games_nextLevel')
        .replace('%1', String(BlocklyGames.LEVEL + 1));
  } else {
    var text = BlocklyGames.getMsg('Games_finalLevel');
  }

  var cancel = document.getElementById('doneCancel');
  cancel.addEventListener('click', BlocklyDialogs.hideDialog, true);
  cancel.addEventListener('touchend', BlocklyDialogs.hideDialog, true);
  var ok = document.getElementById('doneOk');
  ok.addEventListener('click', BlocklyInterface.nextLevel, true);
  ok.addEventListener('touchend', BlocklyInterface.nextLevel, true);

  BlocklyDialogs.showDialog(content, null, false, true, style,
      function() {
        document.body.removeEventListener('keydown',
            BlocklyDialogs.congratulationsKeyDown, true);
        });
  document.body.addEventListener('keydown',
      BlocklyDialogs.congratulationsKeyDown, true);

  document.getElementById('dialogDoneText').textContent = text;
};

var line = variavel_global;

Share this post


Link to post
Share on other sites
6 horas atrás, rnicson disse:

pois está sendo criado cookies

Mas seu script aí em nenhum momento está criando cookie?

 

Poderia ser mais específico do que etá tentando passar para a função modicar nela e regatar fora?

Seria: variavel_global?

 

Ela var foi criada fora da função? Se não ela é um objeto privado da função portanto a função poderia possuir um prototipo para retornar o objeto.

Se isso é feito tem certeza que está usando o objeto correto ou o mesmo existe?

 

Exemplo:

Spoiler

var global = 'Olá sou um objeto window global';

var myFunction = function () {
  this.pulico = 'Olá sou um objeto pulico';
  var privado = 'Olá sou um objeto privado'; /* Isso não pode ser acessado */
  window.global = 'Olá sou um objeto window global mas fui modificado pela função';
};

myFunction.prototype.Publico = function () {
  return this.pulico;
};

myFunction.prototype.Global = function () {
  return window.global;
};

var obj = new myFunction();

console.log(window.global);
console.log(obj.Publico());
console.log(obj.Global());

 

 

Share this post


Link to post
Share on other sites
16 horas atrás, Omar~ disse:

Mas seu script aí em nenhum momento está criando cookie?

 

Poderia ser mais específico do que etá tentando passar para a função modicar nela e regatar fora?

Seria: variavel_global?

 

Ela var foi criada fora da função? Se não ela é um objeto privado da função portanto a função poderia possuir um prototipo para retornar o objeto.

Se isso é feito tem certeza que está usando o objeto correto ou o mesmo existe?

 

Exemplo:

  Ocultar conteúdo


var global = 'Olá sou um objeto window global';

var myFunction = function () {
  this.pulico = 'Olá sou um objeto pulico';
  var privado = 'Olá sou um objeto privado'; /* Isso não pode ser acessado */
  window.global = 'Olá sou um objeto window global mas fui modificado pela função';
};

myFunction.prototype.Publico = function () {
  return this.pulico;
};

myFunction.prototype.Global = function () {
  return window.global;
};

var obj = new myFunction();

console.log(window.global);
console.log(obj.Publico());
console.log(obj.Global());

 

 

Omar com o uso do cookie funciona a leitura da variável em outro arquivo mas não está servindo por conta da exclusão do cookie,ele leva um tempo para excluir e quando atualiza a página pela primeira vez ainda não excluiu,apenas na segunda vez. Isso já iria trazer um resultado não correto.

 

Eu tentei usar da forma que você mandou mas me trouxe o valor undefined ainda.

 

segue abaixo o código que fiz.

 

BlocklyDialogs.congratulations = function() {
  // Add the user's code.
  if (BlocklyGames.workspace) {
    var linesText = document.getElementById('dialogLinesText');
    linesText.textContent = '';
    // Line produces warning when compiling Puzzle since there is no JavaScript
    // generator.  But this function is never called in Puzzle, so no matter.
    var code = Blockly.JavaScript.workspaceToCode(BlocklyGames.workspace);
    code = BlocklyInterface.stripCode(code);
    var noComments = code.replace(/\/\/[^\n]*/g, '');  // Inline comments.
    noComments = noComments.replace(/\/\*.*\*\//g, '');  /* Block comments. */
    noComments = noComments.replace(/[ \t]+\n/g, '\n');  // Trailing spaces.
    noComments = noComments.replace(/\n+/g, '\n');  // Blank lines.
    noComments = noComments.trim();
    this.lineCount = noComments.split('\n').length;
    var pre = document.getElementById('containerCode');
    pre.textContent = code;
    if (typeof prettyPrintOne == 'function') {
      code = pre.innerHTML;
      code = prettyPrintOne(code, 'js');
      pre.innerHTML = code;
    }
    linesText.appendChild(document.createTextNode(text));
  }
};

BlocklyDialogs.congratulations.prototype.Publico = function(){
  return this.lineCount;
}

var obj = new BlocklyDialogs.congratulations();

var count = obj.Publico();

 

Share this post


Link to post
Share on other sites

@Omar~

 

Verifiquei que passando o valor da variável lineCount dessa forma.

document.getElementById("lineCount").innerHTML = lineCount;

Eu consigo pegar o valor no outro arquivo assim <pre id="lineCount"></pre>

Isso faz com que exibe normalmente o valor correto,porém tem alguma forma de inserir o valor de <pre id=""> em uma variável?

Eu tentei usar o 

var count = document.getElementById("lineCount");

Mas não está funcionando,isso já solucionava meu problema.

Share this post


Link to post
Share on other sites
10 horas atrás, rnicson disse:

var count = document.getElementById("lineCount");

var count = document.getElementById("lineCount").innerHTML; /* Mas esse elemento "#lineCount" deve existir no DOM */

 

Lembrando que noComments.split('\n').length; é um integer com a quantidade de itens referentes a quebra de linha de uma instância.

 

11 horas atrás, rnicson disse:

var obj = new BlocklyDialogs.congratulations();

Hahah... congratulations é um prototype do objeto BlocklyDialogs

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 turfeaugusto2
      ola sou novo no forum.
      e novo em programaçao
      gostaria da ajuda pra saber como trocar imagens de divs diferentes,pois uma estra trocando a imagem da outra
      e ja´tentei de tudo pra consertar..agradeço muito pela ajuda
       
       
      <!DOCTYPE html>
      <html lang="en" dir="ltr">
        <head>
        <style>
        
        *{margin:0;padding:0;}

      .container{display:flex;justify-content:space-evenly;flex-wrap:wrap;background:#6ab04c;}
      .card img{width:100%}
      .price {position:absolute;margin:10px 220px;color: #6ab04c;font-size: 20px;}
      .card{width:260px;height:350px;justify-content:center;background:#fff;margin:5px}
      .nav{display:flex;align-items:center;justify-content:center}
      .nav img{display:flex-row;width:80px;height:52px;margin:2px;border: 1px solid #ddd;}
        .name{
        text-transform: uppercase;
        font-size: 20px;
        color: #333;
      }
      .btn{
       display:flex;justify-content:center;padding:5px;
        background: #6ab04c;
        text-align: center;
        color: #fff;
        
      transition: 0.3s;}
      .dis{
          margin:0 0 10px;
        font-size: 16px;
      opacity: 0.7;}
      .product-info{
        padding: 20px;background:silver;
      }
      .btn:hover{
        background: #333;
      }
      </style>
          <meta charset="utf-8">
          <title></title>
          <link rel="stylesheet" href="style.css">
        </head>
        <body>
        <div class="container">
      <div class="card">
        <div class="top-section">
          <div class="price">$80</div><img id="image-container" src="1.png" alt="">
          <div class="nav">
            <img onclick="change_img(this)" src="1.png" alt="">
            <img onclick="change_img(this)" src="2.png" alt="">
            <img onclick="change_img(this)" src="3.png" alt="">
          </div>
          
        </div>
        <div class="product-info">
          <div class="name">Sanglasses</div>
          <div class="dis">Awesome Men Sanglasses</div>
          <a class="btn" href="#">Add to Cart</a>
        </div>
      </div>
      <div class="card">
        <div class="top-section">
          <div class="price">$80</div><img id="image-container" src="1.png" alt="">
          <div class="nav">
            <img onclick="change_img(this)" src="1.png" alt="">
            <img onclick="change_img(this)" src="2.png" alt="">
            <img onclick="change_img(this)" src="3.png" alt="">
          </div>
          
        </div>
        <div class="product-info">
          <div class="name">Sanglasses</div>
          <div class="dis">Awesome Men Sanglasses</div>
          <a class="btn" href="#">Add to Cart</a>
        </div>
      </div>
      <div class="card">
        <div class="top-section">
          <div class="price">$80</div><img id="image-container" src="1.png" alt="">
          <div class="nav">
            <img onclick="change_img(this)" src="1.png" alt="">
            <img onclick="change_img(this)" src="2.png" alt="">
            <img onclick="change_img(this)" src="3.png" alt="">
          </div>
          
        </div>
        <div class="product-info">
          <div class="name">Sanglasses</div>
          <div class="dis">Awesome Men Sanglasses</div>
          <a class="btn" href="#">Add to Cart</a>
        </div>
      </div>
      </div>
        <script type="text/javascript">
          var container = document.getElementById("image-container");
          function change_img(image) {
            container.src = image.src;
          }
        </script>
        </body>
      </html>
    • By dimoreira
      Boa noite programadores, estou a procura de um profissional que desenvolva um site simples, que tem apenas que me mostrar os resultados em tempo real da pagina de resultados da bet 365. Mas especificamente do futebol virtual. Vou mandar em anexo uma foto pra ter como base.   O modelo mais simples possivel é somente para acompanhar os resultados em tempo real sem ter q esta acessando o site da bet.


    • By violin101
      Caros amigos, saudações...
       
      Gostaria de tirar uma dúvida com os amigos, referente JAVASCRIPT.
       
      Estou escrevendo uma rotina, onde o USUÁRIO selecione o Produto e informe o valor de Desconto que deseja informar para o produto. <<=== ATÉ AQUI TUDO BEM.
       
      Minha dúvida:
      tem como pelo o JAVASCRIPT no ato da seleção do PRODUTO o sistema informar se este Produto já foi cadastrado no MYSQL ?
       
      Abaixo posto o código que estou usando para selecionar o Produto.
      MODAL
      <!-- Modal eu utilizo para Selecionar o Produto --> <div class="modal fade" id="modal_prod"> <div class="modal-dialog" style="width:80%;"> <div class="modal-content"> <div class="modal-header" style="font-size:18px; color:#ffffff; background:#307192;"> <h4 class="modal-title"><strong>Lista de Produtos</strong></h4> </div> <div class="modal-body"> <table id="tab_prod" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center;">Cód. Interno</th> <th style="text-align:center;">Descrição do Produto</th> <th style="text-align:center;">Valor Venda</th> <th style="text-align:center;">Categoria</th> <th style="text-align:center;">Ação</th> </tr> </thead> <tbody> <?php if(!empty($prods)){ foreach ($prods as $prd) { //Variável criada para carregar informção dos Dados para o Botão $dataprd = $prd->idProdutos."*".$prd->cod_interno."*".$prd->descricao."*".$prd->valor_venda."*".$prd->categoria; echo '<tr>'; echo '<td width="20" height="10" style="text-align:center;">'.$prd->cod_interno.'</td>'; echo '<td width="250" height="10" style="text-align:left;">'.$prd->descricao.'</td>'; echo '<td width="20" height="10" style="text-align:right;">'.$prd->valor_venda.'</td>'; echo '<td width="20" height="10" style="text-align:center;">'.$prd->categoria.'</td>'; echo '<td width="20" style="text-align:center;"> <button type="button" class="btn btn-success btn-prod" style="margin-right: 2%; padding: 5px 7px;" title="Selecionar Fornecedor" value="'. $dataprd.'" > <span class="fa fa-check"></span> </button></td>'; echo '</tr>'; }//Fim do Foreach }//Fim do IF ?> </tbody> </table> </div> <div class="modal-footer" style="text-align:center; background:#BBAAAA;"> <button type="button" class="btn btn-danger pull-center" data-dismiss="modal">Voltar</button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div>  
      Código em JAVASCRIPT que uso para AGREGAR o Produto na Tabela
      /*---Função para Capturar o Produto selecionado na Modal---*/ $(document).on("click",".btn-prod",function(){ prd = $(this).val(); infoprd = prd.split("*"); $("#idProdutos").val(infoprd[0]); $("#cod_interno").val(infoprd[1]); $("#descricao").val(infoprd[2]); $("#valor_venda").val(infoprd[3]); $("#categoria").val(infoprd[4]); $("#modal_prod").modal("hide"); //Função para Atualizar o Status do Botão statusLimparAgregar() }); //Função para AGREGAR o Item selecionado na Tabela $("#btn-agregar").on("click",function(){ var dsct = document.getElementById("dsct").value; var vlrtotal = document.getElementById("vlrtotal").value; if(dsct == "" || vlrtotal == ""){ alert("Atenção! Nenhuma QUANTIDADE ou VALOR foi informado."); } else { html = "<tr>"; html += "<td width='10%' height='10'><input type='hidden' name='id_prds[]' value='"+infoprd[0]+"'>"+infoprd[1]+"</td>"; html += "<td width='42%' height='10'><input type='hidden' name='descricao[]' value='"+infoprd[2]+"'>"+infoprd[2]+" - <strong style='font-size:12px;'>CATEGORIA: </strong> "+infoprd[4]+"</td>"; html += "<td width='10%' height='10' style='text-align:center;'><input type='hidden' name='vda[]' value='"+infoprd[3]+"'>"+infoprd[3]+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'><input type='hidden' name='desc[]' value='"+dsct+"'>"+dsct+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'><input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-danger btn-remove-produto' style='padding: 2px 5px;' title='Remover Item da Lista'>"+ "<span class='fa fa-remove'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); itens(); $("#btn-agregar").val(null); $("#descricao").val(null); $("#cod_interno").val(null); $("#valor_venda").val(null); $("#categoria").val(null); $("#dsct").val(null); $("#vlrtotal").val(null); //Desabilita Buttons document.getElementById("btn-limp").disabled = true; document.getElementById("btn-agregar").disabled = true; } });  
      Grato,
       
      Cesar
    • By Sapinn
      Iai galera blz? Tô com uma duvida aqui. Eu tenho um menu Vertical Tabs que basicamente me ajuda a navegar em uma pagina sem precisar criar varias rotas para outras paginas. Segue o codigo:
      <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> * {box-sizing: border-box} body {font-family: "Lato", sans-serif;} /* Style the tab */ .tab { float: left; border: 1px solid #ccc; background-color: #f1f1f1; width: 30%; height: 300px; } /* Style the buttons inside the tab */ .tab button { display: block; background-color: inherit; color: black; padding: 22px 16px; width: 100%; border: none; outline: none; text-align: left; cursor: pointer; transition: 0.3s; font-size: 17px; } /* Change background color of buttons on hover */ .tab button:hover { background-color: #ddd; } /* Create an active/current "tab button" class */ .tab button.active { background-color: #ccc; } /* Style the tab content */ .tabcontent { float: left; padding: 0px 12px; border: 1px solid #ccc; width: 70%; border-left: none; height: 300px; } </style> </head> <body> <h2>Vertical Tabs</h2> <p>Click on the buttons inside the tabbed menu:</p> <div class="tab"> <button class="tablinks" onclick="openCity(event, 'London')" id="defaultOpen">London</button> <button class="tablinks" onclick="openCity(event, 'Paris')">Paris</button> <button class="tablinks" onclick="openCity(event, 'Tokyo')">Tokyo</button> </div> <div id="London" class="tabcontent"> <h3>London</h3> <p>London is the capital city of England.</p> </div> <div id="Paris" class="tabcontent"> <h3>Paris</h3> <p>Paris is the capital of France.</p> </div> <div id="Tokyo" class="tabcontent"> <h3>Tokyo</h3> <p>Tokyo is the capital of Japan.</p> </div> <script> function openCity(evt, cityName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("tabcontent"); for (i = 0; i < tabcontent.length; i++) { tabcontent[i].style.display = "none"; } tablinks = document.getElementsByClassName("tablinks"); for (i = 0; i < tablinks.length; i++) { tablinks[i].className = tablinks[i].className.replace(" active", ""); } document.getElementById(cityName).style.display = "block"; evt.currentTarget.className += " active"; } // Get the element with id="defaultOpen" and click on it document.getElementById("defaultOpen").click(); </script> </body> </html> Fonte: https://www.w3schools.com/howto/howto_js_vertical_tabs.asp
      Blz, agora digamos que eu tenha saído da pagina onde tem esse Vertical tab e quando retornar eu gostaria de voltar justamente do lugar de onde eu sai.
      Por exemplo, digamos que eu tenha saído do menu na parti Paris para uma pagina onde tem tudo de Paris quando eu apertar no botão voltar eu quero retornar a pagina onde tem o menu e quero que ele fique na opção Paris inclusive marcado. Quando ele volta ele só vai para a primeira opção.
      Tem algum jeito de fazer isso?
    • By Rebeca Julia Bronzatti
      Eu tô fazendo um site pra uma imobiliária e nele eu possui filtros que não são obrigatórios e nem possuem submit, ex: quantidade de quartos, quantidade de vagas, localização e assim por diante, algo em torno de 15 filtros o usuário pode escolher os filtros que deseja e assim o site realizar uma busca, como não tenho submit tô usando ajax e javascript pra conseguir recuperar os valores, o meu problema está em executar um query com esses valores, eu tô com um form de teste com dois campos só, porém ele não ta executando redondinho do jeito que  preciso, tenho um input e um select se eu selecionar um dos dois ele executa a query mas mostra que a outra não está definida, se eu preencho as duas ele não executa a query, se alguém puder me dar um help em como fazer isso agradeceria muito, tô enrolada nisso faz um tempinho já
      <body> <form method="POST" id="form-pesquisa" action=""> <input type="text" id="pesquisa" style="width: 35%; height: 40px; text-align: center; font-size: 25px;"/> <select name="idade" id="select_idade"> <option value="19" selected>19</option> <option value="18">18</option> </select> </form> <div class="resultado" style="border: 1px solid #222; width: 35%; margin-top: 30px; height: 30px;"> </div> </body> $(function(){ $("#select_idade").change(function(){ var select_idade = $(this).val(); if(select_idade != ''){ var select = { idade : select_idade } $.post('busca_banco.php', select, function(retorna){ $(".resultado").html(retorna); }); }else{ $(".resultado").html(''); } }); //Pesquisar sem refresh na página $("#pesquisa").keyup(function(){ var pesquisa = $(this).val(); //Verifica se há algo digitado if(pesquisa != ''){ var dados = { palavra : pesquisa } $.post('busca_banco.php', dados, function(retorna){ //Mostra dentro da div os resultados obtidos $(".resultado").html(retorna); }); }else{ $(".resultado").html(''); } }); }); $idade = $_POST['idade']; $busca = $_POST['palavra']; $busca_select = "SELECT * FROM teste WHERE TRUE AND IF('$idade' != 0, TRUE) AND IF('$busca' !=0, TRUE)"; $result_busca = mysqli_query($cnn, $busca_select); if(mysqli_num_rows($result_busca)<=0){ echo '<div style = "width:80%; overflow:auto; border-bottom:1px solid #333"> Não existe resultado </div> '; }else{ while ($rows = mysqli_fetch_assoc($result_busca)){ echo '<div style = "width:35%; overflow:auto; border-bottom:1px solid #333"> '.$rows['idade'].' - '.$rows['palavra'].' <br> </div> '; } }  
×

Important Information

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