jQuery obtener texto de área de texto

486

Recientemente comencé a jugar con jQuery y seguí algunos tutoriales. Ahora me siento un poco competente para usarlo (es bastante fácil), y pensé que sería genial si pudiera hacer una 'consola' en mi página web (como en, presionas la tecla 'como lo haces en los juegos de FPS , etc.), y luego haga que Ajax vuelva al servidor para hacer cosas.

Originalmente pensé que la mejor manera sería simplemente obtener el texto dentro del área de texto, y luego dividirlo, o si debería usar el evento keyup, convertir el código clave devuelto a un carácter ASCII, agregar el carácter a una cadena y enviar la cadena a el servidor (luego vaciar la cadena).

No pude encontrar ninguna información sobre cómo obtener texto de un área de texto, todo lo que obtuve fue información clave. Además, ¿cómo puedo convertir el código clave devuelto a un carácter ASCII?

RodgerB
fuente

Respuestas:

713

¿Por qué querrías convertir las pulsaciones de teclas en texto? Agregue un botón que envía el texto dentro del área de texto al servidor cuando se hace clic. Puede obtener el texto usando el atributo de valor como el cartel antes ha señalado, o usando la API de jQuery:

$('input#mybutton').click(function() {
    var text = $('textarea#mytextarea').val();
    //send to server and process response
});
Eran Galperin
fuente
2
Porque el área de texto contendría más que solo el texto necesario. (es la consola, visualice el símbolo del sistema). Gracias por la información sobre la función val. :)
RodgerB
El puede procesar el texto usando javascript. ¿Cuál es el punto de devolver los códigos de golpe de tecla?
Eran Galperin
El punto es, imo, obtener el código del trazo de la tecla sería más eficiente que dividir el área de texto por un delimitador (imagina una posible gran variedad de texto).
RodgerB
2
Lo siento, no puedo visualizar el escenario en el que eso sería cierto ... tal vez si editas tu publicación original y agregas un ejemplo, ayudaría a las personas que intentan responder
Eran Galperin,
Olvidé la parte 'textarea' delante de la identificación de la etiqueta html
Yasith Prabuddhaka
36

Donde a menudo es la función de texto que usa (por ejemplo, en divs, etc.), entonces para el área de texto es val

obtener:

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

conjunto:

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

Debe tener un div que solo contenga los mensajes de la consola, es decir, los comandos anteriores y su salida. Y debajo coloque una entrada o área de texto que solo contenga el comando que está escribiendo.

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

De esta forma, simplemente envía el valor del cuadro de entrada al servidor para su procesamiento y agrega el resultado al div de los mensajes de la consola.

p3drosola
fuente
Sí, exactamente lo que estaba pensando. Es la única solución limpia que no implica analizar la entrada de la salida (es una tontería intentarlo, ¿qué pasa si el usuario escribe sobre alguna "salida") o tratar de construir una cadena de eventos de pulsación de tecla (es una locura intentarlo) - ¿Qué pasa con los espacios de retroceso, etc.?).
Nick Perkins
3
Otro problema XY en SO. Esta es claramente la mejor solución a la 'X' de su problema.
Reimius
14

Normalmente, es la propiedad de valor

testArea.value

¿O hay algo que me falta en lo que necesitas?

sblundy
fuente
De hecho, espero que se invoque un evento de cambio de texto o algo a lo largo de la línea (de todos modos, podría hacer esto bastante fácilmente con el evento keyup). Creo que seguiré usando el evento keyup, pero ¿conoce alguna forma de convertir el código clave en un carácter ASCII? Gracias. :)
RodgerB
8

He descubierto que puedo convertir el KeyCode del evento en un carácter mediante la siguiente función:

var char = String.fromCharCode(v_code);

A partir de ahí, agregaría el carácter a una cadena y, cuando se presione la tecla Intro, enviaría la cadena al servidor. Lo siento si mi pregunta parecía algo críptica, y el título significa algo casi completamente fuera de tema, es temprano en la mañana y todavía no he desayunado;).

Gracias por toda su ayuda chicos.

RodgerB
fuente
7

Me parece que la palabra "consola" está causando la confusión.

Si desea emular una consola full / half duplex de estilo antiguo, usaría algo como esto:

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

evento.que tiene la tecla que se presionó. Para el manejo de retroceso, event.which === 8.

eric
fuente
2

la mejor manera: $ ('# myTextBox'). val ('nuevo valor'). trim ();

Abolfazl Miadian
fuente
0

Lea el valor del área de texto y la conversión de código-char:

Y a continuación, agradable Quake como consola solo en div-s :)

Kamil Kiełczewski
fuente
0

puede obtener datos de área de texto por nombre e identificación

// 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();
usuario889030
fuente