Formulário enviado duas vezes usando submit () no keyup
Eu tinha um código jQuery / HTML semelhante a este:
<code><form action="/SomeAction" method="post"> <input id="my-textbox" type="text" placeholder="Write something and press enter to continue..." /> </form> <script type="text/javascript"> $(function() { $('#my-textbox').keyup(function(e) { var $textbox = $(this); if ($textbox.val().length > 0 && e.keyCode == 13) { $textbox.parent('form').submit(); } }); }); </script> </code>
O objetivo era enviar automaticamente o formulário quando o usuário pressionou a tecla "Enter". Eu uso regularmente o Firefox, então tudo estava OK para mim até que eu testei no Google Chrome e no Internet Explorer.
Quando eu pressionei a tecla Enter nos navegadores posteriores, às vezes eu recebia o formulário enviado duas vezes. Isso foi fácil de perceber porque eu iria conseguir entradas duplicadas no meu banco de dados e veria doisPOST
s usando o Fiddler.
Depois de alguns testes, descobri que meu problema era o código jQuery, já que a caixa de texto se submetia automaticamente ao entrar sem ele, e usar esse código produziria um segundoPOST
em alguns navegadores.
Minhas perguntas são:
Por que os navegadores não previnem de maneira inteligente a segunda postagem do formulário (como o Firefox fez no meu teste)?
Devo esperar esse comportamento em todos os principais navegadores em todas as plataformas?
Existe uma maneira de melhorar este código, então eu executo o envio usando JavaScript, mas não recebo o formulário enviado duas vezes?