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?

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

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

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.


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?


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.


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.



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


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();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.