Me gustaría crear una función simple que agregue texto en un área de texto en la posición del cursor del usuario. Tiene que ser una función limpia. Solo lo básico. Puedo entender el resto.
javascript
textarea
JoshMWilliams
fuente
fuente
Respuestas:
fuente
} else {
myField.selectionStart = startPos + myValue.length;
myField.selectionEnd = startPos + myValue.length;
selectionStart
es un valor numérico y, por lo tanto, debe compararse0
y no'0'
, y probablemente debería usar===
Este fragmento podría ayudarlo con algunas líneas de jQuery 1.9+: http://jsfiddle.net/4MBUG/2/
fuente
Por el bien de Javascript adecuado
fuente
this.value = ...
. ¿Hay alguna manera de preservarlo?Nueva respuesta:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setRangeText
Sin embargo, no estoy seguro del soporte del navegador para esto.
Vieja respuesta:
Una modificación pura de JS de la respuesta de Erik Pukinskis:
Si desea cambiar el valor del texto seleccionado actualmente mientras escribe en el mismo campo (para un efecto de autocompletar o similar), pase
document.activeElement
como primer parámetro.No es la forma más elegante de hacer esto, pero es bastante simple.
Usos de ejemplo:
fuente
Version 54.0.2813.0 canary (64-bit)
, que es básicamente Chrome Canary 54.0.2813.0. Finalmente, si desea que se inserte en el cuadro de texto por ID, usedocument.getElementById('insertyourIDhere')
en lugar deel
en la función.Erik Pukinskis
. Actualizaré la respuesta para reflejarlo mejor.Una solución simple que funciona en Firefox, Chrome, Opera, Safari y Edge, pero probablemente no funcionará en los antiguos navegadores IE.
setRangeText
La función le permite reemplazar la selección actual con el texto proporcionado o, si no hay selección, insertar el texto en la posición del cursor. Solo es compatible con Firefox, que yo sepa.Para otros navegadores hay un comando "insertText" que solo afecta al elemento html actualmente enfocado y tiene el mismo comportamiento que
setRangeText
Inspirado parcialmente por este artículo
fuente
execCommand
porque admiteundo
e hizo insert-text-textarea . No es compatible con IE pero es más pequeñoexecCommand
MDN lo considera obsoleto: developer.mozilla.org/en-US/docs/Web/API/Document/execCommand No sé por qué, ¡parece ser realmente útil!La respuesta de Rab funciona muy bien, pero no para Microsoft Edge, así que también agregué una pequeña adaptación para Edge:
https://jsfiddle.net/et9borp4/
fuente
Me gusta JavaScript simple, y generalmente tengo jQuery alrededor. Esto es lo que se me ocurrió, basado en mparkuk :
Aquí hay una demostración: http://codepen.io/erikpukinskis/pen/EjaaMY?editors=101
fuente