webForumDet fria alternativet

Lägga text i en textarea vid muspekaren

JavaScript

3 svar · 669 visningar · startad av Steam

Medlem sedan juli 2003169 inlägg
Frågan#1

Hej javascript gurus!

Jag har ett problem uppenbarligen :)
Det är som så att jag skulle vilja lägga till en smiley vid muspekarens position i en textarea. Jag har hittat en kod som fungerar i IE och Opera men inte Firefox.

Det skall alltså fungera precis som med smileysarna här i forumet. Ställer jag mig nu högst upp med muspekaren och klickar på en smiley kommer den att infogas där och inte i slutet av texten som det annars sker med scriptet som jag gjorde men även det scriptet som hittas här nedan:

<html>
<head>
<script type="text/javascript">
function storeCaret(ftext)
{
	if (ftext.createTextRange)
	{
		ftext.caretPos = document.selection.createRange().duplicate();
	}
}

function insertsmilie(smilieface)
{
	var t = document.f.t;
	if (t.createTextRange && t.caretPos)
	{
		var caretPos = t.caretPos;
		caretPos.text = smilieface;
		t.focus();
	}
	else
	{
		t.value+=smilieface;
		t.focus();
	}
}
</script>
<body>
<form name="f">
<textarea name="t" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onchange="storeCaret(this);" style="width:400px;height:120px;">Text goes here</textarea><br>
<a href="javascript:;" onclick="insertsmilie(':-)');">Press</a><br>
</form>
</body>
</html>
Medlem sedan okt. 200725 inlägg
#2

I firefox får du använda dig av selectionStart och selectionEnd för att lägga in texten. På detta vis:

function insertsmilie(smilieface)
{
	var t = document.f.t;
	if (t.createTextRange && t.caretPos)
	{
		var caretPos = t.caretPos;
		caretPos.text = smilieface;
		t.focus();
	}
	else if( t.selectionStart )
	{
		var startIndex = t.selectionStart;
		var endIndex = t.selectionEnd; 
		t.value = t.value.substring(0, startIndex) + smilieface + t.value.substring(endIndex, t.value.length); 
		t.selectionStart = startIndex + smilieface.length;
		t.selectionEnd = t.selectionStart;
		t.focus();
	}
	else
	{
		t.value+=smilieface;
		t.focus();
	}
}
Medlem sedan juli 2003169 inlägg
#3

Du är en klippa Davlid! Stort tack.

Jag hade ingen aning om att funktionerna selectionStart och selectionEnd ens fanns.

En följdfråga dock. Varför går det inte att skicka form- samt textareanamn via funktionen tex.

function insertsmilie(smilieface,formname,textname)
{
	var t = document.formname.textname;
        .....

jag får javascript fel som säger att document.exempelsträng ... är odefinerat.

Medlem sedan juli 2003169 inlägg
#4

Nähe inget svar. Det kanske inte går? Isåfall märkligt.

269 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)