Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por PeeWee
      Estou há horas com um problema no meu código, tenho a pagina Auth.php onde há algumas function que funcionam normalmente, porém a seguinte apresenta problemas.
      function getMemberNivel($nivel) {
              $db_handle = new DBController();
              $query = "Select * from members where nivel = ?";
              $result = $db_handle->runQuery($query, 's', array($nivel));
              return $result;
          }
       
      Na Index.php faço a chamada dela da seguinte forma:
       
      $teste = $auth->getMemberByUsername($nivel);
       
      Ocorre que preciso utilizar a variavel $teste, só que exibe erro como se a variavel nao existisse. As demais variaveis vindas da pagina funcionam normalmente. 
      Espero que algum dos colegas possa me ajudar. 
    • Por camargo.2018
      Tou com um erro no meu script e não sei identificar erra pra ele exibir a imagem do usuário mas isso não está acontecendo
       
      Error:

       
      funcao.php:
      function ver_avatar($nick){ include 'str_get_html.php'; $url = "http://pt.clubcooee.com/users/view/".$nick; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $return = curl_exec($ch); curl_close($ch); $html = str_get_html($return); $res = $html->find('.m33 img'); $imgLink = $res[0]->attr['src']; return $imgLink; } str_get_html.php:
      <?php function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) { $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); if (empty($str) || strlen($str) > MAX_FILE_SIZE) { $dom->clear(); return false; } $dom->load($str, $lowercase, $stripRN); return $dom; } ?> menu.php:
      <div class="usr-nav"> <img src="<?php $veavt = ver_avatar($usr); echo $veavt; ?>" class="img-usr"> <p class="name-usr">Nome do Usuário</p> </div>  
      Me Ajudem mas rápido possível pfvrrrr
    • Por camargo.2018
      Não faz upload de jeito nenhum esse e o código que tentei (Pfvr me ajuda :D):
       
      Html:
      <div class="conteudo">     <form enctype="multipart/form-data" action="?pag=upload-programetes" method="POST">     <input type="hidden" name="MAX_FILE_SIZE" value="999999999999999" />     Enviar novos Programetes: <input name="userfile" type="file" />     <input type="submit" value="Enviar arquivo" /> </form></div> Php:
      if($_GET['pag'] == "upload-programetes"){ $upload = upload_programetes($_FILES); echo $upload; } função:
      function upload_programetes($up){ $uploaddir = $_SERVER["DOCUMENT_ROOT"].'/programetes/'; $uploadfile = $uploaddir . basename($up['userfile']['name']); if (move_uploaded_file($up['userfile']['tmp_name'], $uploadfile)) {     return "Arquivo válido e enviado com sucesso.\n"; } else {     return "Possível ataque de upload de arquivo!\n"; } }  
    • Por empirerock
      Bom dia.
      Estou usando datatable em server processing, e uma das colunas não funciona o window.open, ele simplesmente carrega na mesma página, não abre em nova janela.
      Alguém poderia me ajudar?
       
      Justamente a linha    $('td:eq(6)', nRow).html(......      não funciona.
       
      "fnRowCallback": function( nRow, aData, iDisplayIndex ) { $('td:eq(1)', nRow).html('<a href="pdf/componente/'+aData[5]+ '" onclick="window.open(\'pdf/componente/'+aData[1]+'\', \'newwindow4\', \'width=900, height=570\', \'left=30, top=10\', \'scrollbars=1\'); return false;">'+aData[1]+'</a>'); $('td:eq(0)', nRow).html('<a href="pdf/cabo/'+aData[6]+ '" onclick="window.open(\'pdf/cabo/'+aData[0]+'\', \'newwindow4\', \'width=900, height=570\', \'left=30, top=10\', \'scrollbars=1\'); return false;">'+aData[0]+'</a>'); $('td:eq(5)', nRow).html('<a href="pdf/fotos/'+aData[7]+ '" onclick="window.open(\'pdf/fotos/'+aData[7]+'\', \'newwindow4\', \'width=900, height=570\', \'left=30, top=10\', \'scrollbars=1\'); return false;">'+aData[7]+'</a>'); $('td:eq(6)', nRow).html('<a href="pdf/fotos/'+aData[8]+ '" onclick="window.open(\'pdf/fotos/'+aData[8]+'\', \'newwindow4\', \'width=900, height=570\', \'left=30, top=10\', \'scrollbars=1\'); return false;">'+aData[8]+'</a>'); return nRow; },  
    • Por guilherme.audi
      Olá, pessoal,
      Sou meio-leigo e logo mais serei vesgo... não entendi onde está o problema:
       
      Tenho uma situação de submenu bem simples, que deve mostrar (display="table") e esconder (display="none") algumas divs, conforme a seleção do usuário.
      No início da página antes do <head> criei a seguinte estrutura:
       
      <!-- CONTROLE DE ABAS :: MENU DETALHES -->
      <script>
          function SelecCarac() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "table";
              dimensoes.style.display = "none";
              projeto3d.style.display = "none";
              videotutorial.style.display = "none";
              esquemafios.style.display = "none";
          }
          function SelecDimensoes() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "table";
              projeto3d.style.display = "none";
              videotutorial.style.display = "none";
              esquemafios.style.display = "none";
          }
          function Selec3D() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "none";
              projeto3d.style.display = "table";
              videotutorial.style.display = "none";
              esquemafios.style.display = "none";
          }
          function SelecVideo() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "none";
              projeto3d.style.display = "none";
              videotutorial.style.display = "table";
              esquemafios.style.display = "none";
          }
          function SelecEsquemaFios() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "none";
              projeto3d.style.display = "none";
              videotutorial.style.display = "none";
              esquemafios.style.display = "table";
          }
      </script>
      (ridiculamente extenso, até suponho que haja um caminho menor..)
       
      As abas desse "submenu" estão no corpo da página (asp clássico) assim:

      <!-- ABAS :: MENU DE DETALHES DO PRODUTO -->
      <div class="container-principal" style="text-align: center;">
          <% if Len(VetProd(97,0)) > 5 Then %>
              <div class="detalhe-menu-abas" id="bt_carac" onclick="SelecCarac()" >Características</div>
          <%End if
          if Len(VetProd(11,0)) > 0 Then %>
              <div class="detalhe-menu-abas" id="bt_dimensoes" onclick="SelecDimensoes()">Dimensões</div>
          <%End if
          if Len(VetProd(92,0)) > 1 Then %>
              <div class="detalhe-menu-abas" id="bt_3d" onclick="Selec3D()">Desenho 3D</div>
          <%End if
          if Len(VetProd(135,0)) > 3 Then %>
              <div class="detalhe-menu-abas" id="bt_video" onclick="SelecVideo()">Video tutorial</div>
          <%End if
          if Len(VetProd(22,0)) > 0 Then %>
              <div class="detalhe-menu-abas" id="bt_esquemafios" onclick="SelecEsquemaFios()">Ligação dos fios</div>
          <%End if%>
      </div>
      <!-- -->
       
      ..E essas id chamadas "div_carac", "div_dimensoes", "div_3d", "div_video" e "div_esquemafios" estão assim:
       
      <!-- DIMENSÕES -->
      <div class="container-principal" style="text-align: center; display: none;" id="div_dimensoes">
          <h3 style="text-align: left;">Dimens&otilde;es<span class="letramed2">&nbsp;(mm)</span></h3>
          <a href="admin/imgs/icones/<%= VetProd(11,0) %>" target="_blank"><img src="admin/imgs/icones/<%= VetProd(11,0) %>" alt="Dimens&otilde;es de <%= VetProd(1,0) %> em mm" title="<%= VetProd(136,0) %>&nbsp;<%= VetProd(2,0) %>&nbsp;<%= VetProd(1,0) %>" class="detalhe-dimensoes"/></a>
      </div>
      <!-- -->
       
      <!-- CARACTERÍSTICAS ESPECIAIS -->
      <div class="container-principal" id="div_carac">
          <h3>Caracter&iacute;sticas especiais</h3>
          <%= VetProd(97,0)%>
      </div>
      <!-- -->
          
      <!-- VÍDEO INCORPORADO  -->
      <div style="background-color: #000000; width: 100%; display: none;" id="div_video">
          <div class="container-principal" style="background-color: black; text-align: center; padding: 1% 0;">
              <iframe class="detalhe-video" src="<%= VetProd(135,0) %>" frameborder="0" allowfullscreen></iframe><br />
              <a href="https://www.youtube.com/user/weightechbrasil/search?query=<%=VetProd(1,0)%>" style="color:#FFFFFF;" title="Veja mais em Youtube/WeightechBrasil" target="_blank" class="submenu"><img src="http://www.weightech.com.br/imgs/site/Logo_Youtube_color_horizontal.png" height="30" title="Canal WeightechBrasil no Youtube" alt="Youtube.com/WeightechBrasil" style="margin-bottom:5px;"/><br>Youtube.com/WeightechBrasil</a>
          </div>
      </div>
      <!-- -->
       
      <!-- PROJETO 3D -->
      <% if Len(VetProd(92,0)) > 1 Then %>
          <div class="container-principal" style="text-align: center; margin-top: 20px; display: none;" id="div_3d">
              <iframe style="width: 100%; height: 680px;" src="<%=VetProd(92,0)%>" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true" frameborder="0"></iframe>
          </div>
      <%End if%>
      <!-- -->
       
      <!-- ESQUEMA DE LIGAÇÃO -->
      <div class="container-principal" style="display: none;" id="div_esquemafios">
          <h3>Esquema de liga&ccedil;&atilde;o dos fios</h3>
          <img src="admin/imgs/icones/<%= VetProd(22,0) %>" alt="Esquema de liga&ccedil;&atilde;o" title="<%= VetProd(136,0) %>&nbsp;<%= VetProd(2,0) %>&nbsp;<%= VetProd(1,0) %>" style="width:90%; max-width:400px;"/>
      </div>
      <!-- -->
       
      Tudo funciona, exceto o VÍDEO INCORPORADO (id="div_video").
      Por quê?!
       
      Obrigado!
×

Informação importante

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