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?

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
});

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');

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.


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?


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.


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.



0

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

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


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();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.