Como passar valor para um Textarea pela posição do tecclad

3 respostas
J

Como passar valor para um Textarea de acordo com a posição do cursor piscando do teclado em JavaScript???

Por exemplo eu tenho um texto dentro do textarea:
“Oi! Como vai você ! parabéns pelo seu aniversário!!”.

Tenho um botão que passa um valor: “Lalala” para uma função JavaScript.

Se eu clicar com o mouse entre as palavras “você” e “!”, e depois clicar no botão abaixo. Quero que a função JavaScript escreva o valor do botão clicado: “Lalala” aonde eu posicionei o cursor do teclado.

O texto do textarea ficaria assim:

“Oi! Como vai você Lalala! parabéns pelo seu aniversário!!”.

Tem como fazer isso em JavaScript???

document.form.textarea.PosicaoDoCursorDoTeclado->recebe(“Lalala”).

3 Respostas

M

salve,

acho que o código abaixo resolve:

function alteraTexto(text) {
	text = ' ' + text + ' ';
	if (document.formulario.campo.createTextRange && document.formulario.campo.caretPos) {
		var caretPos = document.formulario.campo.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
		document.formulario.campo.focus();
	} else {
	document.formulario.campo.value  += text;
	document.formulario.campo.focus();
	}
}

acho que resolve :idea:

até +

J

Ele continua adicionando o texto no final do Textarea, e não no ponto onde eu cliquei o mouse em cima do textarea!!!

Ex:
Texto do Textarea = “oi porque isso um teste!”

Com a função acima, está ficando no final:
"oi porque isso um teste! é ".

Se eu clicar o mouse em cima do textarea entre “isso” e “um”, e clicar no botão que passa alguma coisa. Por exemplo o botão lança (“é”) para a função. O textarea deve incluir aonde eu cliquei a palavra: “é”. Ficando assim:

Texto do Textarea = “oi porque isso é um teste!”

Tem como???

gmmascarin

Fala Galera,

Segue a solução:

inserirTexto("idTextArea", "Texto a ser inserido na posição selecionada");
function inserirTexto(txtArea, textoInserir){ 
    //Pega a textarea 
    var textarea = document.getElementById(txtArea); 

    var posicao = getPosicaoTextArea(textarea);

    var textoTotal = textarea.value;
    var textoInicio = textoTotal.substring(0, posicao);
    var textoFim = textoTotal.substring(posicao, textoTotal.length);

    textarea.value = textoInicio + textoInserir + textoFim;
    setPosition(txtArea, posicao+textoInserir.length);
}
function getPosicaoTextArea(el) {
	  if (el.selectionStart) { 
	    return el.selectionStart; 
	  } else if (document.selection) { 
	    el.focus(); 

	    var r = document.selection.createRange(); 
	    if (r == null) { 
	      return 0; 
	    } 

	    var re = el.createTextRange(), 
	    rc = re.duplicate(); 
	    re.moveToBookmark(r.getBookmark()); 
	    rc.setEndPoint('EndToStart', re); 

	    var add_newlines = 0;
	    for (var i=0; i<rc.text.length; i++) {
	      if (rc.text.substr(i, 2) == '\r\n') {
	        add_newlines += 2;
	        i++;
	      }
	    }

	    return rc.text.length + add_newlines; 
	  }  
	  return 0; 
}
function setPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
                elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
}
Criado 26 de janeiro de 2005
Ultima resposta 28 de dez. de 2011
Respostas 3
Participantes 3