webForumDet fria alternativet

MAXLENGTH i TEXTAREA med utökad funktion

3 svar · 304 visningar · startad av sharkface

sharkfaceMedlem sedan okt. 200040 inlägg
#1

Hej!

Har ett script som jag använt för att få funktionen MAXLENGTH i TEXTAREA-fält. Nu behöver jag utveckla det en aning och klarar inte av det på egen hand.

Skulle vilja att enterslag räknas som 4 tecken istället för 1. Detta för att enterslag ersätts med <br> när formuläret postas och lagras i databas.

Så här ser koden ut nu:

<PUBLIC:COMPONENT id="bhvMaxlength" urn="maf:Maxlength">
	<PUBLIC:PROPERTY name="maxLength" />
	<PUBLIC:ATTACH event="onkeypress" handler="doKeypress" />
	<PUBLIC:ATTACH event="onbeforepaste" handler="doBeforePaste" />
	<PUBLIC:ATTACH event="onpaste" handler="doPaste" />

<SCRIPT language="JScript">
// --------------------------------------------------------------------
// Fil: maxlength.htc
// Syfte: Används för att få funktionen MAXLENGTH i TEXTAREA-fält
// I CSS-fil: textarea {behavior: url(maxlength.htc);}
// I HTML-fil: <textarea MAXLENGTH="150"></textarea>
// --------------------------------------------------------------------

// Keep user from entering more than maxLength characters
function doKeypress(){
	if(!isNaN(maxLength)){
		maxLength = parseInt(maxLength);
		var oTR = element.document.selection.createRange();
		// Allow user to type character if at least one character is selected
		if(oTR.text.length >= 1)
			event.returnValue = true;
		else if(value.length > maxLength-1)
			event.returnValue = false;
	}
}
// Cancel default behavior
function doBeforePaste(){
	if(!isNaN(maxLength))
		event.returnValue = false;
}
// Cancel default behavior and create a new paste routine
function doPaste(){
	if(!isNaN(maxLength)){
		event.returnValue = false;
		maxLength = parseInt(maxLength);
		var oTR = element.document.selection.createRange();
		var iInsertLength = maxLength - value.length + oTR.text.length;
		var sData = window.clipboardData.getData("Text").substr(0,iInsertLength);
		oTR.text = sData;
	}
}
</SCRIPT>

</PUBLIC:COMPONENT>

Mvh
Petter

J.N.Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

Mycket kod, varför inte endast kolla form.fält.value.length?
Varför spar du <br> och inte vbcrlf och ersätter vid utskrift?

Den enkla lösningen är alltså räkna tecken, och stoppa inte in <br>.

Varför vill du veta antalet tecken du spar, pga fältlängd i databasen, vilken blir fel eftersom <br> blir fyra?
Isåfall:
Kan du inte räkna antal <br> det blir i textarean med RegExp?

TroxyMedlem sedan mars 20041 505 inlägg
#3

Att ersätta enterslag med <br> innan det sparas är dumt eftersom texten då bara kan visas korrekt på HTML-sidor. Om du vill använda texten till något annat, exempelvis göra en pappersutskrift direkt från databasen, whatever, så kommer du se <br> istället för enterslag.

sharkfaceMedlem sedan okt. 200040 inlägg
#4

Varför spar du <br> och inte vbcrlf och ersätter vid utskrift?

Svar:
Ligger på en server med Chilisoft ASP som buggar vid strängar som överstiger en viss längd. När jag försöker ta in tecknen från TEXTAREAN i en sträng och de överstiger ett visst antal så får jag ett 507 unexpected error.

Det är anledningen till att jag vill veta exakta antalet tecken som postas från formuläret. Kasst!

124 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)