2011-09-08 15 views
7

Chcę mieć okno czatu (textarea), w którym jeśli użytkownik naciśnie klawisz Enter, powinien przesłać czat, a jeśli użytkownik kliknie Shift + Enter, powinien wejść w nową linię.Prześlij wartość po naciśnięciu klawisza Enter w obszarze tekstowym i naciśnięcie klawisza Shift + Enter powinno przejść do następnego wiersza.

Próbowałem czegoś, ale nie byłem w stanie znaleźć dokładnego klucza ani słowa kluczowego. Kod używam w tej chwili jest:

$("textarea").keydown(function(e){ 
    if (e.keyCode == 13 && !e.shiftKey) 
    { 
     e.preventDefault(); 
    } 
}); 

jsFiddle

Również chcę, aby uzyskać \n w miejscu, kiedy wprowadzić znak + Shift jest wciśnięty.

EDIT

Problem z mojego kodu jest: -

kiedy jestem sprawdzić zawartość na kliencie za pomocą za pomocą alertu to pokazuje następny wiersz. Ale kiedy go zamieszczam, moje szyny się kończą. Następnie jest to prosty ciąg. Nie ma nic nowego.

Tak właśnie wysyłam czaty do serwera szyny.

$.post("/incomingchat", { body:$("#chat_" + group_id).val() }, 
    function(data){ 
     // do something.. 
    }); 
+6

Proszę nie ** tylko ** link do jsfiddle; zawsze dołączaj również kod do pytania. – Matt

+1

Co jest nie tak z opublikowanym przez ciebie kodem? Dla mnie działa tak, jak opisałeś? http://jsfiddle.net/Su5ts/25/ – ChrisR

+1

@Matt Przepraszam, będę o tym pamiętać. –

Odpowiedz

2

Odpowiedziałem już na to. Jest to trochę trudne, jeśli karetka nie jest na końcu pola tekstowego:

How do I detect "shift+enter" and generate a new line in Textarea?

+0

Problem polega na tym, że umieszczam te dane za pomocą Jquery na moim serwerze zaplecza. Jak mogę zidentyfikować klawisz Enter + Shift? z tyłu kończy się tak samo jak bez klawisza Enter + Shift –

+0

@Mohit: Nie rozumiem. Wartość textarea po naciśnięciu shift + enter będzie zawierała podział wiersza, a ta linia zostanie definitywnie przesłana na serwer podczas publikowania. –

+0

@TimDown: Mam powiązane pytanie. W Chrome, jeśli zajmuję się zdarzeniem naciśnięcia klawisza po naciśnięciu klawisza Enter, dodając znak nowego wiersza "\ n", a jeśli przewijanie tekstu jest przewijane, pasek przewijania nie będzie działał, tzn. Jeśli naciśnie klawisz Enter, obszary tekstowe nie będą przewijane kiedy piszę. Czy masz jakiś pomysł na ten problem? –

3
$("textarea").keydown(function(e) 
{ 
    if (e.keyCode == 13) 
    { 
     if (e.shiftKey) { 
      $(this).val($(this).val() + "\n"); 
     } 
     else { 
      submitTheChat(); 
     } 
    } 
}); 
+0

Problem polega na tym, że umieszczam te dane za pomocą Jquery na moim serwerze zaplecza. Jak mogę zidentyfikować klawisz Enter + Shift? z tyłu kończy się tak samo jak bez klawisza enter + shift –

1

Rozważ użycie zdarzenia przyciśnięcie zamiast. Jeśli uruchomisz kod w jsfiddle, zobaczysz, że nowa linia nie zostanie dodana po naciśnięciu Enter.

$("textarea").keypress(function(e){ 
    if (e.keyCode == 13 && !e.shiftKey) 
    {   
     e.preventDefault(); 
     //now call the code to submit your form 
     alert("just enter was pressed"); 
     return; 
    } 

    if (e.keyCode == 13 && e.shiftKey) 
    {  
     //this is the shift+enter right now it does go to a new line 
     alert("shift+enter was pressed");   
    }  
}); 
+0

Problem polega na tym, że umieszczam te dane za pomocą Jquery na moim serwerze zaplecza. Jak mogę zidentyfikować klawisz Enter + Shift? z tyłu kończy się tak samo jak bez wejścia + klawisz shift –

+0

Ok Widzę. W takim przypadku sugeruję, aby spojrzeć na odpowiedź Tima Downa, którą opublikował powyżej. – pedrodg

Powiązane problemy