Ir para conteúdo

Arquivado

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

MrCharset

Como chamar uma função apenas se dois eventos ocorrerem?

Recommended Posts

Eu tenho vários botões da classe "b3". Um desses tem id="bt1" e display="block". Também tenho vários botões da classe "b4". Um desse tem id="bt2" e display="none"

 

 

Quando clico em algum dos "b3", o display deles todos fica "none" e o display de todos os "b4" fica "block"  //parei a implementação aki...

 

Mas eu preciso que pra cada combinação "b3" + "b4" ocorra um função diferente baseado no id dos botões deles. Por exemplo, teria um função específica  e única para a combinação "bt1" + "bt2"

 

A classe "b3" tem 10 botões e a "b4" tem 6. Eu, teoricamente, preciso fazer 60 funções, e, mesmo assim, nem sei o que por nessa funções!!! Preciso unir dois .clicks para executar cada uma das 60 funções

 

E, além disso, tem uma forma de não serem necessárias 60 funções (com possíveis 60 ifs)?

 

 

Desde já obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, para não ter esses IFs precisaria verificar a necessidade da sua funcao

 

Por exemplo, se fosse para somar os números, aí você teria 10 botões b3 (de 0 à 9) e 10 botões b4 (tb de 0 à 9), quando clicar em um b3 ele colocaria o valor em uma variável e faria o resto(ocultar os b3 e exibir os b4), quando clicar no b4 colocaria o valor em outra variável e chamaria uma única função, que somaria as 2 variáveis.

Como falei, depende da sua necessidade, nesse meu exemplo é um caso simples de soma, na verdade precisaria analisa o que você deseja fazer porque cada necessidade vai exigir soluções diferentes. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado. Na verdade é para movimentar a peça de um jogo:

 

 

Os primeiros dez botões, classe "b3", representam 10 casas de um tabuleiro.

 

Os outros seis botões, classe "b4", representam cada um uma peça do jogo. 

 

Eu preciso que o usuário escolha uma peça e uma nova posição pra essa peça se movimentar.

 

Aí depois eu verifico se essa nova posição está "vazia" (essa parte está tranquila) para poder mover a peça ou se ela está "ocupada", fazendo a peça mais fraca morrer. Mas essa parte está andando.

 

 

O problema é associar a escolha da peça com a escolha da nova posição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dois cliques que você precisa seria:

 

1 click -> escolher o primeiro botão.

2 click -> definir um alvo pra interação

?

 

Se for, porque você acrescentar uma identificação pra posição na peça escolhida, e após apontar o alvo, verificar o que existe nessa peça alvo pra executar a ação, assim você só trataria das peças que interfeririam no momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meio que desisti desta ideia. Tô tentando através de outra abordagem:

 

 

Cada 1 dos 25 terrenos que compõem o tabuleiro tem como id um número:

1             2            3             4            5

6             7            8             9          10

11         12          13          1 4         15

16         17          18          19          20

21         22          23          24          25

Esse é meu tabuleiro. Cada número representa um terreno e, ao mesmo tempo, é o seu id.

 

Então minha "estratégia" para implementar a movimentação é:

Pra frente:  -5 terrenos.

Pra trás: +5 terrenos.

Pra direita: +1 terreno.

Pra esquerda: -1 terreno.

 

Para a implementação (do movimento para frente), estou usando:

$("#'.$this->nome_peca.'").appendTo("#" + String(parseInt($("#'.$this->nome_peca.'").parent().attr("id")) - 5));

O parent de $("#'.$this->nome_peca.'") é a div atual da peça. E eu me movo (usando o appendTo) para esse valor -5.

 

Até aí tudo bem. Mas aí entra a questão de o terreno para o qual quero me mover estar ocupado. Verifico assim:

if (document.getElementById(String(parseInt($("#'.$this->nome_peca.'").parent().attr("id") - 5))).children.length <= 0)

As divs vazias não têm filhos (logo, =0). As ocupadas têm um filho (logo, não conseguiria me mover até elas, em teoria).

 

Juntando tudo, essa é a validação e a execução do movimento pra frente:

 

function mvPeca_frente() {
 echo'<script>

 if(document.getElementById(String(parseInt($("#'.$this->nome_peca.'").parent().attr("id")- 5))).children.length< 1)
 {
  $("#'.$this->nome_peca.'").click(function()

  { 
    $("#'.$this->nome_peca.'").appendTo("#" + String(parseInt($("#'.$this->nome_peca.'").parent().attr("id"))- 5));

  });
 }
</script>'; } 

Porém, não está funcionando. Eu "invado" casas ocupadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

PS.: Começo a envolver PHP no código. Mas acho que a interferência é mínima e não é necessário mudar a categoria da pergunta.

Eu deveria criar um novo tópico exclusivo para essa nova abordagem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui!!! O brigado pela ajuda. Só precisei trocar o .click e o if de posição.

 

function mvPeca_frente()

{
   echo'<script>
   $("#'.$this->nome_peca.'").click(function()

   { 

      if(document.getElementById(String(parseInt($("#'.$this->nome_peca.'").parent().attr("id")- 5))).children.length< 1)
     {
        $("#'.$this->nome_peca.'").appendTo("#" + String(parseInt($("#'.$this->nome_peca.'").parent().attr("id"))- 5));

     }

   });

   </script>'; 

}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ment0r
      Boa noite pessoal, tudo bem?
       
      Estou desenvolvendo um sistema simples com exibição de formulário via modal. Uma vez cadastrado o serviço (tabela possui apenas dois campos, id e nome), eles são exibidos numa tabela com um ícone que permite a alteração do nome.

       
      Eu clico no ícone e é chamado um modal que é gerado via ajax (pois são vários registros).
       

       
      Nesse modal é mostrado o serviço e uma vez alterado, o botão Salvar chama uma função que atualiza a tabela servico, concluindo a tarefa. Fiz o mesmo processo pra cadastrar o serviço, com a diferença de que o modal está presente na mesma página, ou seja, não é chamado via ajax.
       
      Eis os códigos:
      <a href="#" onclick="modalUpdate(<?= trim($array['id']) ?>)"> <i class='bx bx-edit'></i> </a> // Trecho onde eu chamo a função modalUpdate. Função btAltServico click:
      $('#btAltServico').click(function() { var inpnome = $('#nome'); var inpid = $('#id'); if (inpnome.val() == '') { swal("Atenção", "Por favor, preencha os campos obrigatórios", "warning"); if (inpnome.val() == '') { inpnome.css("border","2px solid #f94545"); } else { inpnome.css("border",""); } alert(inpnome); alert(inpid); } else { $.ajax({ url: '../inc/ajax/altServico.php', type: 'post', dataType: 'json', // pode ser html data: { nome : inpnome.val(), id : inpid.val() }, success: function(resposta){ if (resposta == 1) { inpnome.val(""); inpnome.css("border",""); swal("Sucesso", "Serviço alterado", "success"); } else { if (resposta == 0) { swal("Erro", "Serviço não alterado. Log de erro gerado.", "error"); } else { swal("Atenção", "Serviço já cadastrado", "warning"); } } } }) } });  
      E modalUpdate.php :
       
      <?php /* * altServico.php * * Script responsável pelo update de serviços na tabela servico * * Função chamada pelo arquivo ajax.js */ //if ($_POST) { require'../conn.php'; require'../../class/class.geral.php'; $geral = new Geral(); $nome = $_POST['nome']; $id = $_POST['nome']; $ativo = 1; // Verifica se o servico já foi cadastrado $sqlVer = "select nome from algo68_db_cliente.servico where nome = '".$nome."' and id <> ".$id.""; $queryVer = mysqli_query($conn, $sqlVer); $resultVer = mysqli_num_rows($queryVer); if ($resultVer > 0) { echo json_encode(2); // servico já cadastrado } else { // Update do servico $sql = "update algo68_db_cliente.servico set nome = '".$nome."', ativo = ".$ativo." where id = ".$id; $query = mysqli_query($conn, $sql); $result = mysqli_affected_rows($conn); if ($result > 0) { echo json_encode(1); // alterou o servico } else { $geral->logErro(date('d/m/Y|H:i:s'), @$_SERVER[REQUEST_URI], 'AlterarServico', mysqli_error($conn)); echo json_encode(0); // não alterou o servico } } //} ?> O problema é que quando clico no botão Salvar, não acontece nada - se eu colocar um alert qualquer na função click, só pra saber se está chegando, também não da nada. E está da mesma forma que o cadastro de serviço, que funciona perfeitamente.

      Bom, é isso pessoal, tentei ser o mais breve e especifico possível. Qualquer ajuda é bem vinda, obrigado a todos, desde já.
    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • Por Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
    • Por ernestovm
      Bom dia.
      Descobri, depois de muito trabalho, um problema esquisito. Tenho duas imagens que chamam funções JavaScript determinadas. Uma funciona e a outra não. Isso no Firefox. No Chrome as duas funcionam perfeitamente. Alguém conhece alguma gambiarra para fazer o Firefox funcionar? Segue os códigos:
      HTML:
      <img src="images/ic_abrir.png" width="70" height="70" onClick="abre_notificacao(<? echo "'".$us_codigo."','".$item."'"; ?>);" style="cursor:pointer" id="p_imagem-<? echo $item; ?>" name="p_imagem-<? echo $item; ?>">
       <img src="images/ic_excluir.png" width="70" height="70" onClick="excluir_notificacao(<? echo "'".$us_codigo."'"; ?>);" style="cursor:pointer">
      JAVASCRIPT:
      <script type="text/javascript">
          function abre_notificacao(codigo,indice) {
              $("#p_imagem-"+indice).attr("src","images/ic_abrir_ok.png");
              $("#ver-"+indice).css("display", "block");
          }
          function excluir_notificacao(codigo) {
              $.post("excluir_notificacao.php", {codigo: codigo}, function(resposta) {
                  confirm(resposta+" ("+codigo+")");
              });
              location.reload();
          }

      </script>
      A Função abre_notificacao(codigo,indice)  funciona perfeitamente nos dois browsers.
      A Função excluir_notificacao(codigo) só funciona no Chrome.
      Obrigado pela luz
    • Por unset
      Olá, estou começando a usar o twig template e estou com uma dúvida e não encontrei a resposta também não sei se é possível mais espero que seja possível
       
      Bom eu tenho um arquivo com várias funções, como eu faço para chamar essas funções no HTML?
       
      Não funciona assim {{ funcao() }}
×

Informação importante

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