2010-12-16 7 views
7

Lors d'un appel de fonction à partir d'une image, j'essaie d'insérer la valeur de balise alt de l'image dans la zone de texte à l'emplacement actuel du curseur.Comment insérer du texte à la position de curseur actuelle dans une zone de texte

Ceci est le code que j'ai actuellement qui insère la valeur de balise alt à la fin de la zone de texte.

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

    }); 

Les 2 choses que j'ai été un problème avec est de déterminer la position du caret et la création d'une nouvelle chaîne avec la valeur de la zone de texte avant la carets positon + code + j'insérer la valeur de la zone de texte après la position des carets.

+0

double possible de [Insertion d'un texte où le curseur utilise Javascript/JQuery] (http://stackoverflow.com/questions/1064089/inserting-a-text-where-cursor-is-using-javascript-jquery) – user

Répondre

19

j'ai actuellement obtenu cette extension en place:

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

et vous pouvez l'utiliser comme ceci:

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

aussi, je l'ai trouvé sur le blog de quelqu'un il y a longtemps et l'ai modifié pour être plus navigateur croisé. ce n'est pas 100% mais devrait faire l'affaire. Je ne me souviens pas où je l'ai trouvé. –

+0

ça marche dans IE 7, 8, 9? – andufo

+3

@andufo Pourquoi ne l'essayez-vous pas? –

Questions connexes