jQuery pobierz tekst textarea

486

Ostatnio zacząłem grać z jQuery i śledziłem kilka samouczków. Teraz czuję się trochę kompetentny w korzystaniu z niego (jest to dość łatwe) i pomyślałem, że byłoby fajnie, gdybym mógł stworzyć konsolę na mojej stronie internetowej (jak w tym momencie, naciskasz klawisz `` jak w grach FPS , itd.), a następnie niech sam Ajax powróci na serwer, aby coś zrobić.

Początkowo myślałem, że najlepszym sposobem będzie po prostu umieszczenie tekstu w obszarze tekstowym, a następnie podzielenie go, czy też powinienem użyć zdarzenia keyup, przekonwertować kod klucza zwrócony na znak ASCII, dołączyć znak do ciągu i wysłać ciąg do serwer (następnie opróżnij ciąg).

Nie mogłem znaleźć żadnych informacji na temat pobierania tekstu z obszaru tekstowego, otrzymałem tylko informacje o kluczach. Ponadto, w jaki sposób mogę przekonwertować kod klucza zwrócony na znak ASCII?

RodgerB
źródło

Odpowiedzi:

713

Dlaczego chcesz konwertować naciśnięcia klawiszy na tekst? Dodaj przycisk, który po kliknięciu wysyła tekst z obszaru tekstowego na serwer. Możesz pobrać tekst, używając atrybutu value jak wskazał wcześniej plakat, lub używając API jQuery:

$('input#mybutton').click(function() {
    var text = $('textarea#mytextarea').val();
    //send to server and process response
});
Eran Galperin
źródło
2
Ponieważ obszar tekstowy zawierałby więcej niż tylko potrzebny tekst. (to konsola, wizualizuj wiersz poleceń). Dzięki za informacje na temat funkcji val. :)
RodgerB
Możesz przetwarzać tekst za pomocą javascript. Po co zwracać kody klawiszy?
Eran Galperin
Chodzi o to, imo, uzyskanie kodu uderzenia klawisza byłoby bardziej wydajne niż dzielenie obszaru tekstowego przez ogranicznik (wyobrażenie możliwie dużej tablicy tekstu).
RodgerB
2
Przepraszam, ale nie wyobrażam sobie scenariusza, w którym to byłoby prawdą ... może jeśli zredagowałeś swój oryginalny post i dodałeś przykład, to pomogłoby ludziom próbować odpowiedzieć
Eran Galperin
Zapomniałem części „textarea” przed identyfikatorem tagu HTML
Yasith Prabuddhaka,
36

Tam, gdzie często używasz funkcji tekstowej (np. W divach itp.), To dla obszaru tekstowego jest to val

dostać:

$('#myTextBox').val();

zestaw:

$('#myTextBox').val('new value');
Thomas Koelle
źródło
24

Powinieneś mieć div, który zawiera tylko komunikaty konsoli, czyli poprzednie polecenia i ich wynik. A poniżej umieść wpis lub obszar tekstowy, który zawiera tylko wpisywane polecenie.

-------------------------------
| consle output ...           |
| more output                 |
| prevous commands and data   |
-------------------------------
> This is an input box.

W ten sposób po prostu wysyłasz wartość pola wejściowego do serwera w celu przetworzenia i dołączasz wynik do komunikatu konsoli div.

p3drosola
źródło
Tak, dokładnie o czym myślałem. Jest to jedyne czyste rozwiązanie, które nie wymaga ani analizowania danych wejściowych z wyjścia (głupie, aby spróbować - co, jeśli użytkownik wpisze więcej niż „wyjście”), ani próby zbudowania ciągu ze zdarzeń naciśnięcia klawisza (głupie, aby spróbować - co ze spacjami itp.?).
Nick Perkins
3
Kolejny problem XY na SO. Jest to zdecydowanie najlepsze rozwiązanie „X” jego problemu.
Reimius
14

Zwykle jest to właściwość value

testArea.value

A może brakuje mi czegoś, czego potrzebujesz?

sblundy
źródło
Mam nadzieję, że zostanie wywołane zdarzenie ze zmianą tekstu lub coś wzdłuż linii (i tak mógłbym to zrobić całkiem łatwo ze zdarzeniem keyup). Myślę, że pozostanę przy zdarzeniu keyup, ale czy znasz sposób na przekonwertowanie kodu klucza na znak ASCII? Dzięki. :)
RodgerB
8

Doszedłem do wniosku, że mogę przekonwertować kod klucza zdarzenia na znak za pomocą następującej funkcji:

var char = String.fromCharCode(v_code);

Stamtąd dodawałbym znak do łańcucha, a po naciśnięciu klawisza Enter wyślij łańcuch na serwer. Przepraszam, jeśli moje pytanie wydawało się nieco tajemnicze, a tytuł oznaczał coś prawie zupełnie nie na temat, jest wcześnie rano i jeszcze nie jadłem śniadania;).

Dzięki za całą waszą pomoc chłopaki.

RodgerB
źródło
7

Myśli, że słowo „konsola” powoduje zamieszanie.

Jeśli chcesz emulować konsolę full / half duplex w starym stylu, możesz użyć czegoś takiego:

$('console').keyup(function(event){
    $.get("url", { keyCode: event.which }, ... );
    return true;
});

event. który ma naciśnięty klawisz. Do obsługi backspace event.which === 8.

eric
źródło
2

najlepszy sposób: $ ('# myTextBox'). val ('nowa wartość'). trim ();

Abolfazl Miadian
źródło
0

Czytaj wartość pola tekstowego i konwersję znaków kodowych:

A poniżej ładna konsola Quake jak tylko na div-s :)

Kamil Kiełczewski
źródło
0

możesz uzyskać dane textarea według nazwy i identyfikatora

// by name
<textarea name="comment"></textarea>
let text_area_data = $('textarea[name="comment"]').val();

// by id
<textarea id="comment" name="comment"></textarea>
let text_area_data = $('textarea#comment').val();
użytkownik889030
źródło