webForumDet fria alternativet

Knapp för att feta markerad text funkar ej i firefox

JavaScript

15 svar · 663 visningar · startad av kittlos

Medlem sedan sep. 2002205 inlägg
Frågan#1

Har en fin lite javascript-funktion som gör att jag med ett tryck på en knapp får b-taggar runt markerad text.

function addToSelection(before,after){
	if(document.selection.createRange().text){
		document.selection.createRange().text=before+document.selection.createRange().text+after;
	}
}

När jag försöker använda funktionen i Mozilla Firebird får jag felmmeddelandet "Fel: document.selection has no properties"
på raden med if-satsen.

Någon som vet om det går att fixa?

Medlem sedan aug. 20039 340 inlägg
#2

Jag tror inte att mozilla stödjer det. Pröva att ersätta document.selection.createRange() eller document.selection med window.getSelection()
(Pröva båda, jag orkar inte själv nu)

Medlem sedan sep. 2002205 inlägg
#3

Får inte rätt på det. Ingen av alternativen verkar fungera, dessutom blir de fel i IE. Någon som har en lösning som fungerar på båda OS?

Medlem sedan nov. 20017 144 inlägg
Medlem sedan sep. 2002205 inlägg
#5

Det där var ju förvisso en fin lösning, som jag säkert kommer att vilja använda nån dag, men just nu är jag faktiskt bara ute efter att lösa mitt specifika problem, och jag hittar inte i den massiva koden den biten som tar min markering , lägger till ett visst värde före och ett annat efter. Jag gillade verkligen min ursprungskod, som fungerade precis som jag ville. Finns det inget sätt att få det att funka i både ie och mozilla/firefox?

Medlem sedan juli 2000836 inlägg
Medlem sedan sep. 2002205 inlägg
#7

Jo, det har jag också förstått. Men jag är ute efter en lösning.

Medlem sedan juli 2000836 inlägg
#8

Gillar inte att skriva folk på näsan, men om du läser sidan på länken jag skickade, finner du svaret...
Annars kan du ju prova detta:

function addToSelection(before, after){
	var tArea = document.foo.bar //Du måste sicka med din textarea
	if(tArea.selectionStart){
		var beforSel = (tArea.value).substring(0,tArea.selectionStart);
		var theSel = (tArea.value).substring(tArea.selectionStart,tArea.selectionEnd);
		var afterSel = (tArea.value).substring(tArea.selectionEnd);
		tArea.value = beforSel + before + theSel + after + afterSel;
	}

	if(document.selection.createRange().text){
		document.selection.createRange().text=before+document.selection.createRange().text+after;
	}
}
Medlem sedan sep. 2002205 inlägg
#9

jag lyckas inte, varken med exemplen på bugzilla-sidan, eller med det föeslagna exemplet här. Jag vill gärna använda exemplet här, för det är precis så jag vill att det ska fungera. Men jag lyckas inte. Måste man skicka med sin textarea? Den gamla versioenn var så bra för där fungerade samma knapp på alla textareas på sidan. Men den fungerar ju bara i ie...

Medlem sedan juli 2000836 inlägg
#10

Se bif...

Medlem sedan sep. 2002205 inlägg
#11

Nu fungerar det utmärkt, tack. Jag försöker dock modifiera så att jag kan skicka med textareans namn till funktionen, så att jag kan använda samma funktion på alla mina textareas i formuläret. Men jag lyckas inte av någon anledning. Några förslag?

Medlem sedan nov. 20042 inlägg
#12

Går det inte att skicka med textareans namn till funktionen? Jag lyckas inte få till det. Men när jag definierar textarena i funktionen så fungerar det.

Medlem sedan juli 2000836 inlägg
#13

Prova detta:

<script>
tArea = document.getElementsByTagName("textarea")[0]

function addToSelection(before, after){
	if(tArea.selectionStart){
		var beforSel = (tArea.value).substring(0,tArea.selectionStart);
		var theSel = (tArea.value).substring(tArea.selectionStart,tArea.selectionEnd);
		var afterSel = (tArea.value).substring(tArea.selectionEnd);
		tArea.value = beforSel + before + theSel + after + afterSel;
	}

	if(document.selection.createRange().text){
		document.selection.createRange().text=before+document.selection.createRange().text+after;
	}
}

window.onload = function(){
	for(i=0; i<document.getElementsByTagName("textarea").length; i++){
			document.getElementsByTagName("textarea")[i].onfocus = function anonymous(){tArea = this}
		}
}
</script>

<form name="foo">
	<textarea name="bar"></textarea>
	<textarea name="bar2"></textarea>
	<textarea name="bar3"></textarea>
	<textarea name="bar4"></textarea>
</form>

<a href="javascript:addToSelection('<b>', '</b>')">Bold</a>
Medlem sedan nov. 20042 inlägg
#14

fel av mig

Medlem sedan sep. 2002205 inlägg
#15

Strålande! Det innebär ju också att jag kan ha en samma knapp för alla textareas. Det var trevligt. Tack.

Medlem sedan sep. 2002205 inlägg
#16

Men nu märkte jag att när det är så mycket text i textarean att det blir scrollist, då hoppar den upp till toppen av textarean när man markerar text och trycker åp en knapp. Har för mig att man kan undvika detta genom en return false någonstans, men vet inte var.

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)