jQuery get textarea text

486

Récemment, j'ai commencé à jouer avec jQuery et j'ai suivi quelques tutoriels. Maintenant, je me sens un peu compétent pour l'utiliser (c'est assez facile), et je pensais que ce serait cool si je pouvais créer une `` console '' sur ma page Web (comme dans, vous appuyez sur la touche `comme vous le faites dans les jeux FPS , etc.), puis faites-le Ajax lui-même sur le serveur afin de faire des choses.

Au départ, je pensais que le meilleur moyen serait de simplement placer le texte dans la zone de texte, puis de le diviser, ou devrais-je utiliser l'événement keyup, convertir le code clé renvoyé en caractère ASCII, ajouter le caractère à une chaîne et envoyer la chaîne à le serveur (puis videz la chaîne).

Je n'ai trouvé aucune information sur l'obtention de texte à partir d'une zone de texte, tout ce que j'ai obtenu, ce sont des informations de saisie. De plus, comment puis-je convertir le code clé renvoyé en caractère ASCII?

RodgerB
la source

Réponses:

713

Pourquoi voudriez-vous convertir des traits de touche en texte? Ajoutez un bouton qui envoie le texte à l'intérieur de la zone de texte au serveur lorsque vous cliquez dessus. Vous pouvez obtenir le texte en utilisant l'attribut value comme l'a souligné l'affiche avant, ou en utilisant l'API de jQuery:

$('input#mybutton').click(function() {
    var text = $('textarea#mytextarea').val();
    //send to server and process response
});
Eran Galperin
la source
2
Parce que la zone de texte contiendrait plus que le texte nécessaire. (c'est la console, visualisez l'invite de commande). Merci pour les informations sur la fonction val. :)
RodgerB
Vous pouvez alors traiter le texte en utilisant javascript. Quel est l'intérêt de renvoyer les codes de touches clés?
Eran Galperin
Le point est, imo, obtenir le code de trait de clé serait plus efficace que de diviser la zone de texte par un délimiteur (imaginez un tableau de texte éventuellement grand).
RodgerB
2
Désolé, je n'arrive pas à visualiser le scénario dans lequel cela serait vrai ... peut-être que si vous modifiez votre message d'origine et ajoutez un exemple, cela aiderait les gens à essayer de répondre
Eran Galperin
J'ai oublié la partie 'textarea' devant l'identifiant de la balise html
Yasith Prabuddhaka
36

Là où c'est souvent la fonction de texte que vous utilisez (par exemple dans les divs, etc.), alors pour la zone de texte

avoir:

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

ensemble:

$('#myTextBox').val('new value');
Thomas Koelle
la source
24

Vous devriez avoir un div qui contient juste les messages de la console, c'est-à-dire les commandes précédentes et leur sortie. Et en dessous, mettez une entrée ou une zone de texte qui contient simplement la commande que vous tapez.

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

De cette façon, vous envoyez simplement la valeur de la zone de saisie au serveur pour traitement et ajoutez le résultat à la div des messages de la console.

p3drosola
la source
Oui, exactement ce que je pensais. C'est la seule solution propre qui n'implique ni l'analyse de l'entrée de la sortie (idiot d'essayer - que faire si l'utilisateur tape sur une "sortie"), soit d'essayer de construire une chaîne à partir d'événements de frappe (idiot d'essayer - qu'en est-il des backspaces, etc.?).
Nick Perkins
3
Un autre problème XY sur SO. C'est clairement la meilleure solution au «X» de son problème.
Reimius
14

Normalement, c'est la propriété value

testArea.value

Ou y a-t-il quelque chose qui me manque dans ce dont vous avez besoin?

sblundy
la source
J'espère en fait qu'un événement textchanged ou quelque chose le long de la ligne serait invoqué (je pourrais le faire assez facilement avec l'événement keyup de toute façon). Je pense que je m'en tiendrai à l'utilisation de l'événement keyup, mais connaissez-vous un moyen de convertir le code clé en un caractère ASCII? Merci. :)
RodgerB
8

J'ai compris que je pouvais convertir le keyCode de l'événement en personnage en utilisant la fonction suivante:

var char = String.fromCharCode(v_code);

À partir de là, j'ajouterais ensuite le caractère à une chaîne, et lorsque la touche Entrée est enfoncée, j'enverrai la chaîne au serveur. Je suis désolé si ma question semblait quelque peu énigmatique et que le titre signifie quelque chose de presque complètement hors sujet, c'est tôt le matin et je n'ai pas encore déjeuné;).

Merci pour toute votre aide les gars.

RodgerB
la source
7

Il me semble que le mot "console" est à l'origine de la confusion.

Si vous souhaitez émuler une console full / half duplex à l'ancienne, vous utiliseriez quelque chose comme ceci:

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

event.which a la touche qui a été enfoncée. Pour la gestion du retour arrière, event.which === 8.

eric
la source
2

la meilleure façon: $ ('# myTextBox'). val ('new value'). trim ();

Abolfazl Miadian
la source
0

Lire la valeur de la zone de texte et la conversion du code:

Et en dessous de la belle console Quake comme sur div-s uniquement :)

Kamil Kiełczewski
la source
0

vous pouvez obtenir des données de zone de texte par nom et identifiant

// 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();
user889030
la source