1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

ajuda em PHP, submit form ao pressionar enter num input type=text

Discussão em 'Web Development' iniciada por zoidberg, 13 de Fevereiro de 2009. (Respostas: 9; Visualizações: 6406)

  1. zoidberg

    zoidberg Folding Member

    Boas,

    tenho aqui um pequeno desafio que não consigo implementar.

    Basicamente tenho um form com:


    1 Select com várias opções e multiple select

    1 input type=text

    2 submit buttons ( inserir, actualizar )

    o que necessito é que quando o user pressiona o "ENTER" no input type text seja accionado o botão de submit "actualizar".

    O que está a acontecer agora é que como o botão "inserir" está primeiro é esse que é submetido :(

    ( preciso que os botões estejam na mesma form, façam submit, MAS que os possa distinguir ao fazer o request.


    Fiz-me entender? :)

    TKS!
     
  2. mcog_blaster

    mcog_blaster Power Member

    Experimenta algo do genero:

    Código:
    <input type="text" id="some_id" onkeypress="valida(event);" 
    ....
    <script>
    function valida(e)
    {
        if (e.keyCode == 13)
        {
            document.getElementById('butao_actualizar').click();
        }
    }
    </script>
    
     
  3. zoidberg

    zoidberg Folding Member

    epa fantastico!
    realmente nem sei como não me lembrei de uma solução tão simples !

    Tks!

    EDIT: hmmm, No internet explorer 7 não me funciona todas as vezes :S

    No firefox está perfeito...

    Alguma solução?
     
    Última edição: 13 de Fevereiro de 2009
  4. mcog_blaster

    mcog_blaster Power Member

    Hummm. não estou a ver qual será o problema.
    Ajuda assim ?

     
  5. zoidberg

    zoidberg Folding Member

    hmm, infelizmente não :(

    parece que a página faz uma especie de refresh depois do submit e não devolve nada.

    eu tenho depois do
    PHP:
    if ( isset($_REQUEST['sub_actualiza']))
    {

    bla bla bla actualizar na bd )
    $message="Actualizado com sucesso";

    }

    //e mais tarde um 

    echo $message;
    O que acontece é que o $message não é retornado no IE, nem é feita a actualização da bd às vezes :( no Firefox está perfeito e no IE se clicar manualmente no botão também funciona perfeitamente.
     
  6. mcog_blaster

    mcog_blaster Power Member

    Código:
    <input type="text" id="some_id" onkeypress="return valida(this, event)" 
    ....
    <script type="text/javascript">  
       
    function valida(btn,e)  
    {  
       var keycode;  
    
       if (window.event)  
       {  
          keycode = window.event.keyCode;  
       }  
       else if (e)  
       {  
           keycode = e.which;  
       }  
       else  
       {  
          return true;  
       }  
      
       if (keycode == 13)  
       {  
          btn.form.submit();  
          return false;  
       }  
       else  
       {  
          return true;  
       }  
    }  
    </script>  
     
  7. zoidberg

    zoidberg Folding Member

    também n dá :(

    acho que já sei o problema, quando tenho a text box em focus, no IE ele mete um focus tb no 1º botão.

    Ou seja, ele primeiro faz o submit do 1ºbotão, e depois é que vai ao js ( ou algo do género ).
     
  8. zoidberg

    zoidberg Folding Member

    alguém sabe alguma alternativa ao

    PHP:
    document.getElementById('butao_actualizar').click(  );
    que funcione em IE?
     
  9. nopaysoft

    nopaysoft Power Member

  10. p3dro

    p3dro Power Member


    Vê se este exemplo te ajuda em alguma coisa.


    Basicamente peguei no código do mcog_blaster, porém criei 1 campo escondido que vai ser preenchido automaticamente (quando pressionas o "Enter" dentro da caixa de texto) com o valor do botão que queres por omissão (está definido no javascript), o senão é que continua a ser enviado também o valor do botão de submissão normal, se for igual ao botão que queres por omissão tudo ok, caso contrário ficas com valores que se contradizem, mas para ultrapassar este problema poderás fazer 1 simples verificação server-side.

    Supõe que tens 2 campos: "action" e "accao". O "action" é o tal campo escondido e o "accao" é o nome dos botões de submit, poderás verificar que sempre que receberes o valor "action" esse terá primazia sobre o "accao".



    Código:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <script type="text/javascript">
        ProcessSubmit = function(event) {
          event = event || window.event;
          var _bt = document.getElementById("bt_update"); //botão por omissão
          var _hidden = document.getElementById("action"); //guardar info
          var _e = { which: event.which ? event.which : event.keyCode }
          var _SetValue = function(f, v) { f.value = v; }
    
          if (_e.which == 13) {
            _SetValue(_hidden, _bt.value);
            _bt.form.submit();
          }
        }
      </script>
    </head>
    
    <body>
    
      <?php
        $action=($_POST["action"])?$_POST["action"]:$_POST["accao"];
        $value=$_POST["txt"];
        if($action){echo "$action --- $value";}
      ?>
    
      <form method="post" id="frm">
        <input type="hidden" name="action" id="action" />
        <input type="text" name="txt" id="txt" onkeypress="ProcessSubmit(event);" />
        <input type="submit" value="Inserir" name="accao" id="bt_insert" />
        <input type="submit" value="Actualizar" name="accao" id="bt_update" />
      </form>
    
    </body>
    </html>
     

Partilhar esta Página