2010-12-11 13 views
44

Podczas wypełniania obszaru tekstowego formularza domyślnym zachowaniem po naciśnięciu klawisza Enter jest przejście do następnego wiersza. Jak mogę zmienić zachowanie formularza, aby przesłać go po naciśnięciu klawisza Enter, nawet jeśli użytkownik znajduje się w obszarze tekstowym?Jak przesłać formularz przy wejściu, gdy obszar tekstowy jest ustawiony?

Użyłem Firebuga do kasy Stosu   Tekst komentarza w przepełnieniu komentarza (który ma to zachowanie), ale nie widać żadnego JavaScriptu, który to spowodował. Czy istnieje sposób na zmianę zachowania textarea bez użycia JavaScript?

+3

Co jeśli zmiana nazwy to pytanie „Złożenie na wpisanie gdy w textarea”? –

Odpowiedz

95

Nie możesz tego zrobić bez JavaScript. Stackoverflow używa biblioteki JavaScript jQuery, która łączy funkcje z elementami HTML podczas ładowania strony.

Oto jak można zrobić to z podstawowego JavaScript:

<textarea onkeydown="if (event.keyCode == 13) { this.form.submit(); return false; }"></textarea> 

keyCode 13 jest klawisz enter.

Oto jak można to zrobić z jQuery jak podobnie jak Stackoverflow:

<textarea class="commentarea"></textarea> 

z

$(document).ready(function() { 
    $('.commentarea').keydown(function(event) { 
     if (event.keyCode == 13) { 
      this.form.submit(); 
      return false; 
     } 
    }); 
}); 
+11

Ponieważ użytkownicy są bardziej zaznajomieni z działaniami po zwolnieniu klawisza, jest to lepsza praktyka do korzystania z instrukcji onkeyup lub keyup() zamiast keydown(). –

+0

Niezłe wyjaśnienie. @Eric Fortis - dobry punkt na temat onkeyup. – andrew

+0

Napiszę funkcję i umieściłem ją w pliku funkcji formularza, aby zachować czystość kodu. – andrew

4
<form id="myform"> 
    <input type="textbox" id="field"/> 
    <input type="button" value="submit"> 
</form> 

<script> 
    $(function() { 
     $("#field").keyup(function (event) { 
      if (event.which === 13) { 
       document.myform.submit(); 
      } 
     } 
    }); 
</script> 
+0

Zauważ, że odpowiednią częścią kodu HTML jest identyfikator, użyłem pola tekstowego, ale może to być dowolny znacznik, do którego chcesz dołączyć zachowanie. Również dla czytelności wolę wywoływać formularz przez jego identyfikator, jak pokazano, jest to bardzo przydatne, szczególnie jeśli masz wiele formularzy w kodzie. –

+0

ładne, nie planuję w tej chwili uczenia jquery. Wolę napisać tę funkcję samodzielnie, ponieważ wtedy mam szansę ćwiczyć pisanie javascript – andrew

5

Dlaczego chcesz, aby tekst był przesyłany po naciśnięciu Enter?

Po naciśnięciu klawisza "tekst" zostanie przesłany domyślnie. Jest to wejście liniowe.

<input type="text" value="..."> 

"Tekst" nie będzie, ponieważ korzysta z możliwości wieloliniowych. Przesyłanie przy wejściu odbiera część tego świadczenia.

<textarea name="area"></textarea> 

Możesz dodać kod JavaScript, aby wykryć naciśnięcie klawisza Enter i automatycznie przesłać, ale lepiej skorzystać z wprowadzania tekstu.

+1

Ponieważ chcę wielowierszowego pola wprowadzania i chcę, aby użytkownik mógł przesłać, naciskając enter. Zamierzam całkowicie pozbyć się przycisku przesyłania. Myślę, że SO powinien pozbyć się ich przycisku Dodaj komentarz, jeśli zamierzają zezwolić na przesłanie komentarza po naciśnięciu klawisza Enter. – andrew

Powiązane problemy