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

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!
 
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>
 
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:
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.
 
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>
 
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 ).
 
alguém sabe alguma alternativa ao

PHP:
document.getElementById('butao_actualizar').click(  );

que funcione em IE?


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>
 
Back
Topo