Jump to content

Archived

This topic is now archived and is closed to further replies.

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.

Share this post


Link to post
Share on other 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. 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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>'; 

}
 

Share this post


Link to post
Share on other sites

  • Similar Content

    • By 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) 
    • By 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.
    • By 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
    • By 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() }}
    • By Luiz Henrique
      Olá,
      Existe alguma forma de executar a função dentro da mesma?
      EX:
       
      function pai(){
          pai();
      }
       
      Obrigado.
×

Important Information

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