2011-08-05 21 views
20

Me gustaría mostrar una lista desplegable en un <textarea> para ayudar al usuario a escribir ciertas cosas. Usted sabe esto de los IDEs actuales como la finalización del código. A medida que empiezas a escribir algo, aparecerá una ventana emergente en la ubicación actual del cursor/cursor y podrás navegar con las teclas de flecha para completar tu ingreso de texto.¿Cómo puedo encontrar la ubicación del cursor (X/Y, no línea/columna) en un área de texto HTML?

how to get the cursor position en la cadena de texto (es decir, el índice de caracteres de la posición del cursor), pero no sé cómo conseguir la coordenadas X/Y (algo así como offsetWidth y offsetHeight) del cursor dentro del elemento <textarea> de manera que Puedo ubicar mi elemento de lista allí. ¿Es eso posible en HTML/JavaScript, y cómo funcionaría?

+2

+ 1 ¡Esa es una muy buena pregunta! – Ben

+3

Si conoce el número de caracteres y el ancho del cuadro, ¿puede adivinar la posición en función del ancho/altura de línea del carácter promedio? –

+0

He leído la otra pregunta propuesta, pero no considero que su respuesta sea una solución al problema. Además, tiene 3 años y los navegadores y estándares han avanzado mientras tanto. No tengo miedo de necesitar un navegador actual para que esto funcione. – ygoe

Respuesta

2

Con una entrada editable html (en un iframe como CKeditor o Rich Text Editor o incluso mejor: jsfiddle) se podría insertar un elemento span vacío en la posición de intercalación y obtener la posición de ese elemento para mostrar su menú desplegable.

Puede parecer complejo, pero no se me ocurre ninguna otra forma de hacerlo.

Tiene algunas posibilidades adicionales cuando se utiliza para un editor de código, usted podría código de color del código de texto y formato como jsFiddle hace, y tal vez incluso construir algún tipo de código-auto-completado de palabras clave, etc.

+1

Las posibilidades adicionales suenan bien, al igual que su sugerencia interesante. Pero me gustaría asegurarme de que el usuario no pueda ingresar texto formateado (como cuando se copia desde MS Word u otras páginas web) y todo el texto pegado se reformatea para que parezca texto plano y se puede convertir a tal. – ygoe

+0

Eso es posible, jsfiddle.net hace precisamente eso. Cómo exactamente lo hacen, no lo sé. Intente codificar y pegar en ese sitio por un momento, podría darle algunas ideas. (En FF ctrl + v no funciona, pero "clic derecho - pegar") – Willem

+0

CKeditor se puede descargar y usar como código abierto, pero jsfiddle parece ser solo una aplicación web, sin descarga, sin conocimientos técnicos. ¿Sabes cómo hicieron sus cosas? – ygoe

Cuestiones relacionadas