Problem with events and functions running multiple times in jQuery code?

Asked

Viewed 136 times

1

Hello. I’m having a very serious problem with events that are triggered several times by clicking a certain button.

I have the task management system below:

inserir a descrição da imagem aqui

When I click on the status button (That are with the status of PENDING or STAND_BY) the button becomes the status "FINISHED" and creates a new activity for the following month (All this done with AJAX and PHP).

We also have that button (with a focus icon) that is in the STAND BY column. This button, when clicked, causes any activity to receive the status of "STAND_BY" (on hold) and receives the text "ACTIVITY STOPPED DUE TO MISSING FILES". The problem is this button on the STAND BY column.

PROBLEM: When I click on this button (from the STAND BY column), it normally transforms the status to "STAND_BY" and inserts the comment from and when I click on the "STAND_BY" button it becomes the status "FINISHED". The problem is that when I do these situations again, without refreshing the page, when clicking the STAND BY column button and completing an activity, multiple activities start to be generated. That is, it seems that events begin to be executed more than once by clicking on the button. When we refresh the page, everything goes back to the initial cycle.

Bottom line: Events are running more than once after the first events run.

I know that the problem is very particular and it is difficult to explain here, because you are not familiar with the code. I went through everything and couldn’t find a solution to it. I’ll leave the code below and if you can help me, I would appreciate it. Thank you!

Follow the jQuery code below: (I will try to take out the less important parts of the code).

$(document).ready(function() {
  //Chamando Função de Preencher Dashboard
  update_dashboard();

  //Aqui repitimos a cada 1 segundo 

  setInterval(function() {
    update_dashboard();

  }, 1 * 1000);


  //CÓDIGO PARA PREENCHIMENTO DA LISTA COM OS DADOS DA PESQUISA 

  $('#formulario-consulta').submit(function(e) {
    e.preventDefault();
    $('#botao-click-dashboard').val("submit-vindo-do-formulario");
    var formulario = $(this);
    var retorno = inserirFormulario(formulario);

  });


  //CÓDIGO PARA QUANDO CLICAR NO DASHBOARD "RESULTADOS-PENDENTES"

  $(document).on("click", "#resultados-pendentes", function(e) {
    e.preventDefault();
    $('#botao-click-dashboard').val("PENDENTE");
    var formularioPendente = $("#formulario-consulta");

    var retorno = inserirFormulario(formularioPendente);


  });




  function inserirFormulario(dados) {
    $.ajax({
      //dataType: "json",
      type: "POST",
      data: dados.serialize(),
      url: "banco/pagina-minhas-tarefas/interface-resultado-pesquisa.php",
      cache: false,


    }).done(function(data) {

      var atividades = "";

      $.each($.parseJSON(data), function(chave, valor) {

        //FUNÇÃO PARA FORMATAR AS DATAS QUE VEM DO PHP
        function dataAtualFormatada(parametro) {
          if (parametro == null) {
            parametro = "";
            return parametro;
          } else {
            var data = new Date(parametro),
              dia = data.getDate().toString(),
              diaF = (dia.length == 1) ? '0' + dia : dia,
              mes = (data.getMonth() + 1).toString(), //+1 pois no getMonth Janeiro começa com zero.
              mesF = (mes.length == 1) ? '0' + mes : mes,
              anoF = data.getFullYear();
            return diaF + "/" + mesF + "/" + anoF;
          }
        }


        var vencimento = dataAtualFormatada(valor.DT_VENCIMENTO);
        var inicio = dataAtualFormatada(valor.DT_INICIO);
        var fim = dataAtualFormatada(valor.DT_FIM);


        //CRIANDO AS LINHAS COM OS TD DA TABELA QUE SÃO O RESULTADO NA CONSULTA AO BANCO 

        atividades += '<tr class="' + valor.codigo + '" name="' + valor.STATUS + '">';
        //atividades += '<td>' + valor.codigo + '</td>';
        atividades += '<td class="th-ocultar-responsivo-tbody">' + valor.COD + '</td>';
        atividades += '<td>' + valor.EMPRESAS + '</td>';
        atividades += '<td class="th-ocultar-responsivo-tbody">' + valor.TRIBUTACAO + '</td>';
        atividades += '<td>' + valor.TIPO_ATIVIDADE + '</td>';
        atividades += '<td>' + vencimento + '</td>';
        atividades += '<td class="th-ocultar-responsivo-tbody">' + inicio + '</td>';
        atividades += '<td class="th-ocultar-responsivo-tbody">' + fim + '</td>';


        if (valor.STATUS == "INICIADO") {
          atividades += '<td><button type="button" class="btn ' + valor.STATUS + ' reabriratividade  colocarstandby css-iniciado" value="' + valor.codigo + '">' + valor.STATUS + '</button></td>';
        } else if (valor.STATUS == "CONCLUIDO") {
          atividades += '<td><button type="button" class="btn ' + valor.STATUS + ' reabriratividade  colocarstandby css-concluido" value="' + valor.codigo + '">' + valor.STATUS + '</button></td>';
        } else if (valor.STATUS == "CONCLUIDO_VENCIDO") {
          atividades += '<td><button type="button" class="btn ' + valor.STATUS + ' reabriratividade  colocarstandby css-concluido-vencido" value="' + valor.codigo + '">' + valor.STATUS + '</button></td>';
        } else if (valor.STATUS == "VENCIDO") {
          atividades += '<td><button type="button" class="btn ' + valor.STATUS + ' reabriratividade  colocarstandby css-vencido" value="' + valor.codigo + '">' + valor.STATUS + '</button></td>';
        } else if (valor.STATUS == "PENDENTE") {
          atividades += '<td><button type="button" class="btn ' + valor.STATUS + ' reabriratividade  colocarstandby css-pendente" value="' + valor.codigo + '">' + valor.STATUS + '</button></td>';
        } else if (valor.STATUS == "INICIADO_VENCIDO") {
          atividades += '<td><button type="button" class="btn ' + valor.STATUS + ' reabriratividade colocarstandby css-iniciado-vencido" value="' + valor.codigo + '">' + valor.STATUS + '</button></td>';
        }

        //botão stand_by do status
        else if (valor.STATUS == "STAND_BY") {
          atividades += '<td><button type="button" class="btn ' + valor.STATUS + ' css-stand-by" value="' + valor.codigo + '">' + valor.STATUS + '</button></td>';
        }

        //botão reabrir atividade coluna
        atividades += '<td class="th-ocultar-responsivo-tbody"><button type="button" class="btn css-reabrir REABRIRATIVIDADE data-toggle="tooltip" data-placement="bottom" title="Clique aqui caso tenha iniciado a atividade ou concluido indevidamente, reabrir a atividade não altera a duração de execução da atividade" " name="' + valor.STATUS + '" value="' + valor.codigo + '"><img src="_imagens/reabrir.png"></button></td>';

        //botão stand_by da coluna
        atividades += '<td class="th-ocultar-responsivo-tbody"><button type="button" class="btn  btn-primary stand-by-coluna data-toggle="tooltip" data-placement="bottom" title="Clique aqui caso você tenha algum tipo de problema que impeça de iniciar ou concluir uma atividade, Exemplo: Não envio de documentação de um cliente"" id="' + valor.codigo + '"  value="' + valor.COD + '"><img src="_imagens/stand_by.png"></button></td>';

        //botão inserir detalhes
        atividades += '<td class="th-ocultar-responsivo-tbody"><button type="button" class="btn css-detalhes" <a class="" href="#" data-toggle="modal" data-target="#modal-observacoes"><img src="_imagens/historicotarefa.png"></a></button></td>';
        //botão inserir detalhes
        //atividades += '<td><a  class="btn btn-md btn-primary css-detalhes " href="#" data-toggle="modal" data-target="#modal-observacoes"><img src="_imagens/historicotarefa.png"></a></button></td>';


        atividades += '</tr>';


      });

      $('#registros-atividades').html(atividades);


      //CÓDIGO PARA QUANDO CLICAR NA LINHA DA TABELA <TR> QUE ESTÁ DENTRO DA <TABLE>

      $(document).on("click", "#registros-atividades tr", function(e) {
        e.preventDefault();

        var botao = $(this).attr('class');
        $("input[name='codigo-modal-observacoes']").val(botao);

        //Código para tirar e remover background no tr ao clicar nele
        $(this).siblings().removeClass('ativo');
        $(this).toggleClass('ativo');

        var retorno = pesquisarDetalhes(botao);
      });



      //CÓDIGO ENVIAR OS DADOS DO MODAL DE DETALHES PARA O BANCO DE DADOS

      $('#inserir-observacoes').submit(function(e) {
        e.preventDefault();
        var formulariodetalhes = $(this);


        var retorno = inserirDetalhes(formulariodetalhes);

      });


      //CÓDIGO PARA QUANDO CLICAR NOS BOTÕES, ELES ALTERAREM SUA COR, TEXTO E CONSULTA AO BANCO


      //CÓDIGO PARA QUANDO CLICAR NO BOTÃO 'PENDENTE' ELE VIRAR 'INICIADO' (NO TEXTO, COR DO BOTAO E NO BANCO DE DADOS)'
      $(document).on("click", ".PENDENTE", function(e) {

        $(this).html('INICIADO');
        //andrews//////////////////////////////
        $(this).css('background-color', 'rgb(236, 200, 70)');
        $(this).css('border', '1px solid gray');
        $(this).css('color', 'royalblue');
        $(this).css('font-weight', 'bold');
        $(this).css('border-radius', '5px');
        //andrews//////////////////////////////
        $(this).attr('class', 'btn INICIADO');

        var estate = "INICIADO";
        var codigo = $(this).val();
        var antigoestado = "NAO_ERA_STAND_BY"; //ESSA VARIÁVEL FOI CRIADA SÓ PARA A FUNÇÃO DE MUDAR STANDY_BY PARA CONCLUÍDO FUNCIONAR. ELA NÃO TEM VALOR AQUI


        var alterar = alterarStatus(estate, codigo, antigoestado);


      });



      //CÓDIGO PARA QUANDO CLICAR NO BOTÃO 'INICIADO' ELE VIRAR 'CONCLUIDO' (NO TEXTO, COR DO BOTAO E NO BANCO DE DADOS)'
      $(document).on("click", ".INICIADO", function(e) {


        $(this).html('CONCLUIDO');
        //andrews//////////////////////////////
        $(this).css('background-color', 'rgb(86, 137, 73)');
        $(this).css('border', '1px solid gray');
        $(this).css('color', 'rgb(255, 255, 255)');
        $(this).css('font-weight', 'bold');
        $(this).css('border-radius', '5px');
        //andrews//////////////////////////////
        $(this).attr('class', 'btn CONCLUIDO');

        var estate = "CONCLUIDO";
        var codigo = $(this).val();
        var antigoestado = "NAO_ERA_STAND_BY"; //ESSA VARIÁVEL FOI CRIADA SÓ PARA A FUNÇÃO DE MUDAR STANDY_BY PARA CONCLUÍDO FUNCIONAR. ELA NÃOO TEM VALOR AQUI



        var criar = criarAtividade(codigo);
        var alterar = alterarStatus(estate, codigo, antigoestado);

      });




      //CÓDIGO PARA QUANDO CLICAR NO BOTÃO 'VENCIDO' ELE VIRAR 'INICIADO/VENCIDO' (NO TEXTO, COR DO BOTAO E NO BANCO DE DADOS)'

      $(document).on("click", ".VENCIDO", function(e) {

        $(this).html('INICIADO_VENCIDO');
        //andrews//////////////////////////////
        $(this).css('background-color', 'rgb(196, 95, 49)');
        $(this).css('border', '1px solid gray');
        $(this).css('color', 'white');
        $(this).css('font-weight', 'bold');
        $(this).css('border-radius', '5px');
        //andrews//////////////////////////////
        $(this).attr('class', 'btn INICIADO_VENCIDO');

        var estate = "INICIADO_VENCIDO";
        var codigo = $(this).val();
        var antigoestado = "NAO_ERA_STAND_BY"; //ESSA VARIÁVEL FOI CRIADA SÓ PARA A FUNÇÃO DE MUDAR STANDY_BY PARA CONCLUÍDO FUNCIONAR. ELA NÃOO TEM VALOR AQUI


        var alterar = alterarStatus(estate, codigo, antigoestado);


      });



      //CÓDIGO PARA QUANDO CLICAR NO BOTÃO 'INICIADO/VENCIDO' ELE VIRAR 'CONCLUIDO/VENCIDO' (NO TEXTO, COR DO BOTAO E NO BANCO DE DADOS)'

      $(document).on("click", ".INICIADO_VENCIDO", function(e) {

        $(this).html('CONCLUIDO_VENCIDO');
        //andrews//////////////////////////////
        $(this).css('background-color', 'rgb(106, 83, 157)');
        $(this).css('border', '1px solid gray');
        $(this).css('color', 'white');
        $(this).css('font-weight', 'bold');
        $(this).css('border-radius', '5px');
        //andrews//////////////////////////////
        $(this).attr('class', 'btn CONCLUIDO_VENCIDO');


        var estate = "CONCLUIDO_VENCIDO";
        var codigo = $(this).val();
        var antigoestado = "NAO_ERA_STAND_BY"; //ESSA VARIÁVEL FOI CRIADA SÓ PARA A FUNÇÃO DE MUDAR STANDY_BY PARA CONCLUÍDO FUNCIONAR. ELA NÃOO TEM VALOR AQUI


        var criar = criarAtividade(codigo);
        var alterar = alterarStatus(estate, codigo, antigoestado);


      });





      //CÓDIGO PARA QUANDO CLICAR NO BOTÃO 'STANDY BY DA COLUNA', ENTÃO ALTERAR O STATUS DA ATIVIDADE PARA STANDY_BY

      $(document).on("click", ".stand-by-coluna", function(e) {
        e.preventDefault();

        var tipo_ativ = 'STAND_BY'; /*$(this).attr('class')*/
        //andrews//////////////////////////////
        $(this).css('background-color', '#424242');
        $(this).css('border', '1px solid gray');
        $(this).css('color', 'white');
        $(this).css('font-weight', 'bold');
        $(this).css('border-radius', '5px');
        //andrews//////////////////////////////
        var codigo_emp = $(this).attr('id');
        var cod_emp = $(this).val();


        $("tr." + codigo_emp + " button.colocarstandby").html("STAND_BY");
        $("tr." + codigo_emp + " button.colocarstandby").css('background-color', 'black');
        $("tr." + codigo_emp + " button.colocarstandby").attr('class', 'btn STAND_BY');



        //CHAMANDO FUNÇÃO QUE UTILIZA O AJAX PARA ALTERAR O STATUS PARA STAND_BY NO BANCO DE DADOS

        var alterarstandby = transformarStandBy(tipo_ativ, codigo_emp, cod_emp);

        tipo_ativ = "";


      });


      //CÓDIGO PARA TRANSFORMAR O BOTÃO STAND BY EM CONCLUIDO

      $(document).on("click", ".STAND_BY", function(e) {
        e.preventDefault();

        $(this).html('CONCLUIDO');
        //andrews//////////////////////////////
        $(this).css('background-color', 'rgb(86, 137, 73)');
        $(this).css('border', '1px solid gray');
        $(this).css('color', 'rgb(255, 255, 255)');
        $(this).css('font-weight', 'bold');
        $(this).css('border-radius', '5px');
        //andrews//////////////////////////////
        $(this).attr('class', 'btn CONCLUIDO');

        var estate = "CONCLUIDO";
        var codigo = $(this).val();
        var antigoestado = "STAND_BY";



        var criar = criarAtividade(codigo);
        var alterar = alterarStatus(estate, codigo, antigoestado);




      });





    }).fail(function() {


    }).always(function() {


    });



    //CÓDIGO PARA QUANDO CLICAR NO BOTÃO 'REABRIR ATIVIDADES', ENTÃO A ATIVIDADE SERÁ REABERTA

    $(document).on("click", ".REABRIRATIVIDADE", function(e) {
      e.preventDefault();

      var elemento = $(this);
      var sts = $(this).attr('name');
      var codigo_empr = $(this).val();

      //PASSAR BOTÃO DE CONCLUIDO PARA INICIADO				
      if (sts == "CONCLUIDO") {
        $("tr." + codigo_empr + " button.reabriratividade").html("INICIADO");
        //andrews//////////////////////////////
        $("tr." + codigo_empr + " button.reabriratividade").css('background-color', 'rgb(236, 200, 70)');
        $("tr." + codigo_empr + " button.reabriratividade").css('border', '1px solid gray');
        $("tr." + codigo_empr + " button.reabriratividade").css('color', 'royalblue');
        $("tr." + codigo_empr + " button.reabriratividade").css('font-weight', 'bold');
        $("tr." + codigo_empr + " button.reabriratividade").css('border-radius', '5px');
        //andrews//////////////////////////////
        $("tr." + codigo_empr + " button.reabriratividade").attr('class', 'btn INICIADO REABRIRATIVIDADE');

        //Altera o atributo name do elemento
        elemento.attr('name', 'INICIADO');

        var novo_status = "INICIADO";
        var reabrir = reabrirAtividade(sts, novo_status, codigo_empr);

      }

      //PASSAR BOTÃO DE CONCLUIDO_VENCIDO PARA INICIADO_VENCIDO	
      else if (sts == "CONCLUIDO_VENCIDO") {
        $("tr." + codigo_empr + " button.reabriratividade").html("INICIADO_VENCIDO");

        //andrews//////////////////////////////
        $("tr." + codigo_empr + " button.reabriratividade").css('background-color', 'rgb(196, 95, 49)');
        $("tr." + codigo_empr + " button.reabriratividade").css('border', '1px solid gray');
        $("tr." + codigo_empr + " button.reabriratividade").css('color', 'white');
        $("tr." + codigo_empr + " button.reabriratividade").css('font-weight', 'bold');
        $("tr." + codigo_empr + " button.reabriratividade").css('border-radius', '5px');
        //andrews//////////////////////////////
        $("tr." + codigo_empr + " button.reabriratividade").attr('class', 'btn INICIADO_VENCIDO REABRIRATIVIDADE');


        //Altera o atributo name do elemento
        elemento.attr('name', 'INICIADO_VENCIDO');


        var novo_status = "INICIADO_VENCIDO";
        var reabrir = reabrirAtividade(sts, novo_status, codigo_empr);

      }

      //PASSAR BOTÃO DE INICIADO PARA PENDENTE	
      else if (sts == "INICIADO") {
        $("tr." + codigo_empr + " button.reabriratividade").html("PENDENTE");
        //andrews//////////////////////////////				
        $("tr." + codigo_empr + " button.reabriratividade").css('background-color', 'RoyalBlue');
        $("tr." + codigo_empr + " button.reabriratividade").css('border', '1px solid gray');
        $("tr." + codigo_empr + " button.reabriratividade").css('color', 'white');
        $("tr." + codigo_empr + " button.reabriratividade").css('font-weight', 'bold');
        $("tr." + codigo_empr + " button.reabriratividade").css('border-radius', '5px');
        //andrews//////////////////////////////					
        $("tr#" + codigo_empr + " button.reabriratividade").attr('class', 'btn PENDENTE REABRIRATIVIDADE');

        //Altera o atributo name do elemento
        elemento.attr('name', 'PENDENTE');

        var novo_status = "PENDENTE";
        var reabrir = reabrirAtividade(sts, novo_status, codigo_empr);


      }


      //PASSAR BOTÃO DE INICIADO_VENCIDO PARA VENCIDO	
      else if (sts == "INICIADO_VENCIDO") {
        $("tr." + codigo_empr + " button.reabriratividade").html("VENCIDO");
        //andrews//////////////////////////////					
        $("tr." + codigo_empr + " button.reabriratividade").css('background-color', 'rgb(165, 42, 42)');
        $("tr." + codigo_empr + " button.reabriratividade").css('border', 'px solid gray');
        $("tr." + codigo_empr + " button.reabriratividade").css('color', 'white');
        $("tr." + codigo_empr + " button.reabriratividade").css('font-weight: bold;', 'bold');
        $("tr." + codigo_empr + " button.reabriratividade").css('border-radius', '5px');
        //andrews//////////////////////////////							
        $("tr." + codigo_empr + " button.reabriratividade").attr('class', 'btn VENCIDO REABRIRATIVIDADE');


        //Altera o atributo name do elemento
        elemento.attr('name', 'VENCIDO');

        var novo_status = "VENCIDO";
        var reabrir = reabrirAtividade(sts, novo_status, codigo_empr);


      }


    });



  }

  // ---------------------------------- FUNÇÕES -------------------------------------------------------//


  //Criação da função que altera o dashboard
  function update_dashboard() {
    $.ajax({
      url: "banco/pagina-minhas-tarefas/prencher-dashboard.php",
      type: "post",
      dataType: "json"

    }).done(function(retornodashboard) {
      //Aqui atualizamos os H1 do Dashboard com os novos resultados:
      $("h1#pendentes").html(retornodashboard.pendentes);
      $("h1#iniciados").html(retornodashboard.iniciados);
      $("h1#iniciados-vencidos").html(retornodashboard.iniciados_vencidos);
      $("h1#vencidos").html(retornodashboard.vencidos);
      $("h1#concluidos").html(retornodashboard.concluidos);
      $("h1#concluidos-vencidos").html(retornodashboard.concluidos_vencidos);


    }).fail(function() {
      console.log("Erro ao atualizar");

    }).always(function() {


    });

  }

  // FUNÇÃO QUE FAZ O POST DE QUANDO CLICAR NO BOTÃO DE DETALHES, APARECER O DETALHE (do campo da tabela) na DIV id#espaco-detalhes  //

  function pesquisarDetalhes(dados) {


    $.ajax({

      type: "POST",
      data: {
        botao: dados
      },
      url: "banco/pagina-minhas-tarefas/interface-consulta-comentarios.php",
      cache: false,
      async: false

    }).done(function(retornodobanco) {

      var detalhes = "";
      var feedback = "";


      //Aqui abaixo, preenchemos as divs com os dados vindo da consulta ao arquivo php do AJAX

      $.each($.parseJSON(retornodobanco), function(chave, valor) {
        if (valor.DETALHES == null) {
          info = "Não Possui Observações";
          detalhes = "<p>" + info + "</p>";

        } else {
          detalhes = "<p>" + valor.DETALHES + "</p>";
        }

        if (valor.FEEDBACK == null) {
          info2 = "Não Possui Feedback";
          feedback = "<p>" + info2 + "</p>";
        } else {
          feedback = "<p>" + valor.FEEDBACK + "</p>";
        }




      });


      $('#espaco-detalhes').html(detalhes);
      $('#espaco-feedback').html(feedback);


    }).fail(function() {


    }).always(function() {


    });

  }


  // --------- FUNÇÃO  PARA INSERIR OBSERVAÇÕES NO CAMPO DO BANCO DA RESPECTIVA ATIVIDADE SELECIONADA ------------------- //


  function inserirDetalhes(parametro) {
    $.ajax({
      data: parametro.serialize(),
      url: "banco/pagina-minhas-tarefas/inserir-observacoes.php",
      type: "POST",
      cache: false,



    }).done(function(data) {
      alert(data);


    }).fail(function() {


    }).always(function() {


    });

  }


  //FUNÇÃO PARA ALTERAR OS STATUS QUANDO CLICAR NOS BOTÕES "STATUS"

  function alterarStatus(estate, codigo, antigoestado) {

    $.ajax({
      url: "banco/pagina-minhas-tarefas/mudarstatus.php",
      type: "POST",
      data: {
        estate: estate,
        codigo: codigo,
        antigoestado: antigoestado
      },
      async: false

    }).done(function(data) {



    }).fail(function() {


    }).always(function() {


    });

  }



  //FUNÇÃO PARA CRIAR ATIVIDADE QUANDO CLICAR NO BOTÃO STANDY BY E PASSAR PARA CONCLUÍDO

  function criarAtividade(codigo) {

    $.ajax({
      url: "banco/pagina-minhas-tarefas/criar-atividade.php",
      type: "POST",
      data: {
        codigo: codigo
      },
      async: false

    }).done(function(data) {



    }).fail(function() {


    }).always(function() {


    });

  }


  //FUNÇÃO PARA A AÇÃO DE TRANSFORMAR O STATUS DA ATIVIDADE EM STAND BY

  function transformarStandBy(tipo_ativ, codigo_emp, cod_emp) {

    $.ajax({
      url: "banco/pagina-minhas-tarefas/tarefa-stand-by.php",
      type: "POST",
      data: {
        tipoatividade: tipo_ativ,
        codigo: codigo_emp,
        cod: cod_emp
      },
      async: false

    }).done(function(data) {



    }).fail(function() {


    }).always(function() {


    });

  }

  //FUNÇÃO PARA A AÇÃO QUE OCORRE QUANDO CLICAMOS NO BOTÃO DE REABRIR A ATIVIDADE

  function reabrirAtividade(sts, novo_status, codigo_empr) {

    $.ajax({
      url: "banco/pagina-minhas-tarefas/reabrir-atividades.php",
      type: "POST",
      data: {
        sts: sts,
        novo_status: novo_status,
        codigo_empr: codigo_empr
      },
      async: false

    }).done(function(data) {



    }).fail(function() {


    }).always(function() {


    });

  }

});

The code is quite extensive. I’m sorry, I tried to keep it down to a minimum. Thanks in advance. Thank you!

  • First I suggest taking the "$(Document).on.." from within "$(Document). ready(Function() {..". Then check your function "update_dashboard()" may be generating problems because it is in setinterval. Some multiple request problems are due to code logic, do it in stages and you will get to the problem. disable everything and activate, adding the code, part until you find the problem.

  • Thanks, @Fernandovaller . You say take all $(Document). on out of the code ? Regarding the update_dashboard function, I tried without it and did not solve the problem.

  • The problem is that click events are inside a function that is called several times, and each call generates a new one, multiplying them. Events should be out of function.

1 answer

1


Within the function function inserirFormulario(dados) you are creating Event handlers. This function is called at least twice:

Here:

$('#formulario-consulta').submit(function(e) {
   e.preventDefault();
   $('#botao-click-dashboard').val("submit-vindo-do-formulario");
   var formulario = $(this);
   var retorno = inserirFormulario(formulario);
});

And here:

$(document).on("click", "#resultados-pendentes", function(e) {
   e.preventDefault();
   $('#botao-click-dashboard').val("PENDENTE");
   var formularioPendente = $("#formulario-consulta");
   var retorno = inserirFormulario(formularioPendente);
});

Each time the function is called, new ones are created Event handlers, like this, for example:

$(document).on("click", "#registros-atividades tr", function(e) {...

That is, each time you fire the click on the element #registros-atividades tr will fire click X times in the amount in the function inserirFormulario was called.

What you should do is put these handlers out of function, because they will listen to the event only once. In short, take everything you have of event within the function and put them outside of it.

  • But @Sam, the function of the click event is not to run as soon as I click on the given element in the event ? So how do you just click on an event that calls a function, you can fire an event that is within that function ? I remember I put these events inside the function because someone recommended me for some reason, which I don’t remember. I’ll try it in your way.

  • Next: each time the function is called, it will generate a new $(document).on("click"...... when you click on the element that calls the event, it will fire how many times . on ("click").. drew?

  • Again, thank you, @Sam. But you can see some plausible reason for the boy to recommit me to leave these events inside the function ?

  • If it were to be executed only 1 time, it would justify placing them within the function

  • It is even a matter of logic rs... if I want to capture a click on an element, why put the stop within a function? Until pq, as I said, each time the function is called, will multiply the event and 1 click will turn, 2, 3, 4 etc...

  • A final question, Fernando Valler recommended it here: "First I suggest taking the "$(Document).on.." from within "$(Document). ready(Function() {.." " ... You can see why he recommended this ?

  • Either in or out. The only difference I can see is that if you put it in, the event will only work after the DOM is loaded, but that’s ridiculous, because the DOM is loaded in a split second.

  • Thank you, Sam. I’ll approve your answer there. One last question. How to make a click event work only once and only work again when the page is reloaded ? I mean, I want the button to only transform the activity status once. Because when I click the STAND BY column button, to leave the activity with STAND_BY status it does this action normally and inserts a comment. But when I click on it again, with the status already being STAND_BY, the message is only inserted. And if I click the button, the message is always inserted.

  • Dude, try changing the .on for .one. I don’t know if it will work in your case, but try it there. Otherwise we will have to find another solution.

  • I did, but then it cancels the events on all <tr> lines of the query. And I would like it to be done only on the line that I click. If you want I open a question related to this (if you prefer).

Show 6 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.