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?
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?
http://remysharp.com/2007/02/10/ie-7-breaks-getelementbyid/ -> Não li, n sou grande coisa a JS, mas ajuda?
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>