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?

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

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

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.


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?


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.


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.



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 :)


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();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.