Formularz został przesłany dwukrotnie przy użyciu submit () na keyup

Miałem kod jQuery / HTML podobny do tego:

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

Celem było automatyczne przesłanie formularza, gdy użytkownik nacisnął klawisz „Enter”. Regularnie korzystam z Firefoksa, więc wszystko było w porządku dla mnie, dopóki nie testowałem w Google Chrome i Internet Explorer.

Kiedy nacisnąłem klawisz Enter w późniejszych przeglądarkach, czasami otrzymałem formularz przesłany dwukrotnie. Było to łatwe do zauważenia, ponieważ dostałbym zduplikowane wpisy w moim DB i zobaczyłbym dwaPOSTs używa Skrzypka.

Po kilku testach dowiedziałem się, że moim problemem był kod jQuery, ponieważ pole tekstowe będzie automatycznie wysyłane przy wejściu bez niego, a użycie tego kodu da sekundęPOST w niektórych przeglądarkach.

Moje pytania to:

Dlaczego przeglądarki nie zapobiegają inteligentnie drugiemu postowi (tak jak Firefox w moim teście)?

Czy powinienem oczekiwać takiego zachowania we wszystkich głównych przeglądarkach na wszystkich platformach?

Czy istnieje sposób na ulepszenie tego kodu, więc wykonuję zgłoszenie za pomocą JavaScript, ale nie przesyłam formularza dwukrotnie?

questionAnswers(4)

yourAnswerToTheQuestion