Avatar billede rour Nybegynder
14. april 2005 - 23:35 Der er 7 kommentarer og
1 løsning

Bestemme antal tegn pr. linje i textarea (tvungen linjeskift)

Jeg er ved at lave et info system, hvor man skal intaste noget i et tekstfelt. Det skal sidenhen sættes ind på en side hvor der er 4 linjer med 40 tegn i hver linje.

Jeg vil gerne ha det sådan, at når man indtaster i textareaet, så ser man direkte når man skifter linje. Det vil sige at hvis man taster over 40 tegn indsættes automatisk et linje skift, og curseren i textarea'et flytter sig ned til næste linje.

Er der nogen bud på hvordan man løser det?
Avatar billede detox Nybegynder
14. april 2005 - 23:45 #1
Måske javascript?
Avatar billede busschou Praktikant
14. april 2005 - 23:46 #2
ja javascript... ala
----
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
function textCounter(field, countfield, maxlimit) {
if (field.value.length > maxlimit) // if too long...trim it!
field.value = field.value.substring(0, maxlimit);
// otherwise, update 'characters left' counter
else
countfield.value = maxlimit - field.value.length;
}
// End -->
</script>
</HEAD>
<BODY>

<center>
<form name=myform action="YOUR-SCRIPT.CGI">
<font size="1" face="arial, helvetica, sans-serif"> ( You may enter up to 160 characters. )<br>
<textarea name=message cols=40 rows=4 onKeyDown="textCounter(this.form.message,this.form.remLen,125);" onKeyUp="textCounter(this.form.message,this.form.remLen,125);"></textarea>
<br>
<input readonly type=text name=remLen size=3 maxlength=3 value="160"> characters left</font>
</form>
</center>
Avatar billede rour Nybegynder
15. april 2005 - 00:02 #3
Tak for svar, men problemet med at skifte line blev ikke løst, curseren i tekstfeltet skifter ikke linje når der er indtastet over 40 tegn i linjen. Der er forskel på tegnenes brede, og derfor er det svært at benytte cols=40.
Avatar billede busschou Praktikant
15. april 2005 - 07:25 #4
Følgende virker i FF
--------------------
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
function textCounter(field, countfield, maxlimit) {
if (field.value.length == 40 || field.value.length == 81|| field.value.length == 122){
field.value = field.value+"\n";
}else if (field.value.length > maxlimit){
field.value = field.value.substring(0, maxlimit);
}else{
countfield.value = maxlimit - field.value.length;
}
}
// End -->
</script>
</HEAD>
<BODY>

<center>
<form name=myform action="YOUR-SCRIPT.CGI">
<font size="1" face="arial, helvetica, sans-serif"> (max 40 tegn i max 4 linjer)<br>
<textarea name=message cols=50 rows=4 onKeyDown="textCounter(this.form.message,this.form.remLen,163);" onKeyUp="textCounter(this.form.message,this.form.remLen,163);"></textarea>
<br>
<input readonly type=text name=remLen size=3 maxlength=3 value="163"> characters left</font>
</form>
</center>
---------------
I IE laver den et mellemrum og tæller derfor een mere
Overvej i øvrigt om "\n" skal tælle med i de 40 tegn?
For man kan ikke lave linjeskift uden det mindst fylder eet tegn
Du kan rimelig snildt selv rette i koden. Du kan se der sammenlignes med 40,81,122
Det er fordi linjeskiftet ikke tælles med i de 40 så der er 41 i hver linje. Det er også derfor størrelserne nederst på siden er 163
Avatar billede busschou Praktikant
15. april 2005 - 07:33 #5
Jeg ved ikke hvorfor der er forskel på FF og IE på det punkt
Det virker som om FF tolker "\n" promte og rykker en linje ned hvorimod IE indsætter det og det på skærmen ligner et blanktegn indtil næste tegn indtastes.
Prøv evt og kopiere koden ind i javascript kategorien, for der er muligvis en som ved mere :o)
Et andet dillemma er hvis man skriver og så vil slette noget. Når man så når til et "\n" ja så bliver scriptet jo ved med at sætte den karakter ind. Derfor kan man ikke slette forbi den! Man kan heller ikke bare markere den linje man ønsker rette og så slette i den. Så snart man har slettet et tegn vil den danne en ny "\n" for enden.
Test lige selv og overvej mulighederne. Som sagt er der nok en i Javascript kategorien som ved mere. (da jeg godt kan se mit foreslag ikke er så godt)
--------
Men du kan lave et tjek i php når din form med dit textarea submittes og så give en fejlmeddelelse hvis det ikke stemmer overens.
Avatar billede busschou Praktikant
15. april 2005 - 07:58 #6
Jeg tror denne løsning vil være bedre for dig:
----------
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
function tjek(){
  var x = document.getElementsByName("message");
  var y = x[0].value.split('\n');
  if(y.length > 4){
    alert("Der må max være 4 linjer");
    return false;
  }else{
        for (i = 0; i < y.length; i++){
            if(y[i].length > 40){
                alert("Der må max være 40 tegn pr linje");
                return false;
            }
        }
  }
  return true;
}
// End -->
</script>
</HEAD>
<BODY>

<center>
<form name=myform action="#" onsubmit="return tjek()">
<font size="1" face="arial, helvetica, sans-serif"> (max 40 tegn i max 4 linjer)<br>
<textarea name=message cols=50 rows=4></textarea>
<input type=submit name=submit value=submit></input>
</form>
</center>
Avatar billede rour Nybegynder
15. april 2005 - 09:23 #7
Jeg tror jeg vil oprette spørgsmålet i JavaScript sektionen som  busschou foreslår.
Løsningen med alert vinduet, er ikke så god synes jeg, da man jo stadig ikke kan se tekst ombrydningen på skærmen. Men tak for forsøget. Jeg har foresten brugt  busschous text counter så jeg vil gerne give point, lig trygt et svar...
Avatar billede busschou Praktikant
15. april 2005 - 09:33 #8
jamen ok så og pøj pøj med det :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester