2010-12-16 12 views
7

En una llamada de función desde una imagen, estoy tratando de insertar el valor de etiqueta alt de la imagen en el área de texto en la posición donde está actualmente.Cómo insertar texto en la posición actual de intercalación en un área de texto

Este es el código que tengo actualmente y que inserta el valor de la etiqueta alt al final del área de texto.

$("#emoticons").children().children().click(function() { 
     var ch = $(this).attr("alt"); 
     $("#txtPost").append(ch); 

    }); 

Las 2 cosas que han estado teniendo un problema con el que se determina la posición del cursor, y la creación de una nueva cadena con el valor del área de texto antes de la positon signos de intercalación + el código que estoy insertando el valor + del área de texto después de la posición de los enlaces.

+0

posible duplicado de [Insertar un texto en el que el cursor está utilizando Javascript/jQuery] (http://stackoverflow.com/questions/1064089/inserting-a-text-where-cursor-is-using-javascript-jquery) – user

Respuesta

19

He actualmente tiene esta extensión en su lugar:

$.fn.insertAtCaret = function(text) { 
    return this.each(function() { 
     if (document.selection && this.tagName == 'TEXTAREA') { 
      //IE textarea support 
      this.focus(); 
      sel = document.selection.createRange(); 
      sel.text = text; 
      this.focus(); 
     } else if (this.selectionStart || this.selectionStart == '0') { 
      //MOZILLA/NETSCAPE support 
      startPos = this.selectionStart; 
      endPos = this.selectionEnd; 
      scrollTop = this.scrollTop; 
      this.value = this.value.substring(0, startPos) + text + this.value.substring(endPos, this.value.length); 
      this.focus(); 
      this.selectionStart = startPos + text.length; 
      this.selectionEnd = startPos + text.length; 
      this.scrollTop = scrollTop; 
     } else { 
      // IE input[type=text] and other browsers 
      this.value += text; 
      this.focus(); 
      this.value = this.value; // forces cursor to end 
     } 
    }); 
}; 

y se puede utilizar de esta manera:

$("#txtPost").insertAtCaret(ch); 
+0

también, encontré esto en el blog de alguien hace mucho tiempo y lo modifiqué para ser más navegador cruzado no es 100% pero debería hacer el truco. No puedo recordar dónde lo encontré. –

+0

funciona en IE 7, 8, 9? – andufo

+3

@andufo ¿Por qué no lo intentas? –

Cuestiones relacionadas