2008-09-28 34 views
405

Recientemente comencé a jugar con jQuery, y he estado siguiendo un par de tutoriales. Ahora me siento un poco competente con el uso (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 FPS, etc.), y luego tener Ajax de vuelta al servidor para hacer cosas.jQuery get textarea text

Originalmente pensé que la mejor manera sería simplemente colocar el texto dentro del área de texto, y luego dividirlo, o debería usar el evento de teclado, convertir el código clave devuelto a un carácter ASCII, anexar el carácter a una cadena y envíe la cadena al servidor (luego vacíe 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 sobre la configuración. Además, ¿cómo puedo convertir el código clave devuelto a un carácter ASCII?

Respuesta

614

¿Por qué le gustaría convertir trazos de tecla a texto? Agregue un botón que envíe el texto dentro del área de texto al servidor cuando se haga clic. Usted puede obtener el texto con el atributo de valor como el cartel antes se ha señalado, o el uso de 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 consola, visualiza el símbolo del sistema). Gracias por la información sobre la función val. :) – RodgerB

+0

Puede procesar el texto usando javascript. ¿Cuál es el punto de devolver los códigos clave de trazo? –

+0

El punto es que, imo, obtener el código de pulsación de tecla sería más eficiente que dividir el área de texto por un delimitador (imagine una matriz de texto posiblemente grande). – RodgerB

13

Normalmente, es la propiedad del valor

testArea.value 

O hay algo que me falta en lo que necesita?

+0

Realmente esperaba que se invocara un evento textchanged o algo a lo largo de la línea (podría hacer esto bastante fácilmente con el evento de teclado de todos modos). Creo que me quedaré con el uso del evento de teclado, pero ¿conoces una forma de convertir el código clave en un carácter ASCII? Gracias. :) – RodgerB

8

he dado cuenta de que puedo convertir el código clave del evento a un personaje usando la siguiente función :

var char = String.fromCharCode(v_code); 

a partir de ahí habría que poner el carácter en una cadena, y cuando se presiona la tecla enter enviar la cadena al servidor. Lamento que mi pregunta pareciera algo críptica, y el título significa algo completamente fuera de tema, es temprano en la mañana y todavía no he desayunado;).

Gracias por toda su ayuda, muchachos.

23

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

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

De esa manera usted acaba de enviar el valor de la caja de entrada al servidor para su procesamiento, y añadir el resultado a los mensajes de la consola div.

+0

Sí, exactamente lo que estaba pensando. Es la única solución limpia que no implica analizar la entrada desde la salida (es una tontería intentarlo, ¿y si el usuario teclea algo de "salida"), o tratar de construir una cadena a partir de eventos de pulsación de tecla (tonto de intentar - ¿Qué pasa con los espacios de retroceso, etc.?). –

+3

Otro problema XY en SO. Esta es claramente la mejor solución para la 'X' de su problema. – Reimius

7

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

Si desea emular un viejo estilo consola completa/semi-dúplex, que tendría que utilizar algo como esto:

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

event.which tiene la tecla que se ha pulsado. Para el manejo del retroceso, event.which === 8.

18

Donde suele ser la función de texto que utiliza (p.en divs, etc) y luego para el área de texto es val

get:

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

conjunto:

$('#myTextBox').val('new value'); 
0

la mejor manera:. $ ('# MyTextBox') Val ("nuevo valor '). trim();