[js] maximum aantal regels textarea

Pagina: 1
Acties:

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Hoi,

Heeft er hier iemand suggesties voor een manier om een maximum te stellen aan het aantal regels in een <textarea> element? Ik dacht zelf eerst de tekst te splitten in een array met de '\n' string. Probleem is dat als je gewoon doortypt in zo'n veld er geen newline karakters worden toegevoegd. Ook als je een stuk tekst knipt en plakt in een textarea zet hij er geen newline tussen.
Dus de vraag, hoe kan ik achterhalen hoeveel regels er gevuld zijn in een textarea?

Ps: ik heb er nix aan om te gaan werken met een maximum aantal karakters, ik MOET echt het maximum regels kunnen vaststellen en ervoor zorgen dat de gebruiker hier niet overheen gaat.

Alvast bedankt voor reactie!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Je moet ook geen maximum aantal regels vaststellen, maar een max. aantal karakters.
Dat is een stuk makkelijker te controleren en enforcen.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
hmjah, zoals al in mijn ps stond vermeld, gezien de toepassing van deze webapplicatie is dit geen optie helaas..

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Definieer regel: zijn dat regels binnen een textarea of zijn het tekenreeksen gesplitst door \n. Verder kan een client natuurlijk makkelijk javascript uitzetten, dus bouw ook een controle die serverside checkt.

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
Splits de inhoud in losse regels (\r\n), tel van elke regel het aantal tekens en deel dat door de regellengte (uiteraard monospace font gebruiken); dan heb je per zin het aantal regels, en dus het totaal aantal.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 05-05 18:54

TeeDee

CQB 241

Misschien dubbelop (of ik begrijp sjroorda verkeerd :))

Stel het max aantal karakters per regel in.
Loop in de inhoud net zolang door totdat je op het aantal karakters per regel zit.

Maar wacht eens, we moeten ook "fatsoenlijk" afbreken.
Stel een marge in van hoeveel karakters er maximaal naar voren geloop-ed mag worden tot aan een spatie.
Anders net zo lang terugloopen totdat je op een spatie zit. Vervolgens zet je een \n en ga je weer verder.

Je wil niet werken met max. aantal karakters :) * TeeDee moet beter lezen.

[ Voor 10% gewijzigd door TeeDee op 29-06-2005 15:17 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

sjroorda schreef op woensdag 29 juni 2005 @ 15:11:
Splits de inhoud in losse regels (\r\n), tel van elke regel het aantal tekens en deel dat door de regellengte (uiteraard monospace font gebruiken); dan heb je per zin het aantal regels, en dus het totaal aantal.
En als ik dan kleine lettertypes in mijn OS of browser ingesteld heb kan ik dus meer typen ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:58

crisp

Devver

Pixelated

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

Daar geld hetzelfde probleem, als ik met ctrl- of ctrl+ speel kan ik veel meer typen ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:58

crisp

Devver

Pixelated

André schreef op woensdag 29 juni 2005 @ 15:25:
[...]

Daar geld hetzelfde probleem, als ik met ctrl- of ctrl+ speel kan ik veel meer typen ;)
Daarom moet je het serverside ook nog controleren, en dat is op zich best mogelijk mbv een array met de breedte per letter bij een bepaald lettertype ;) (en dat zou je ook clientside kunnen doen)

[ Voor 6% gewijzigd door crisp op 29-06-2005 15:29 ]

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

Ik denk dat het misschien nog makkelijker kan, zet de rows eigenschap van de textarea op bijvoorbeeld 5. Controleer daarna bij elke verandering de scrollHeight, die mag nooit boven een bepaalde waarde komen omdat er dan dus teveel regels zijn.

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
André schreef op woensdag 29 juni 2005 @ 15:18:
[...]

En als ik dan kleine lettertypes in mijn OS of browser ingesteld heb kan ik dus meer typen ;)
Toch wel, alleen wordt met een regellengte gerekend die korter is dan wat je op je scherm typt. Gezien de aard van de vraag heeft de TS een vaste regellengte in zijn hoofd, wellicht voor afdrukken of zoiets? Iets meer duidelijkheid helpt waarschijnlijk!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Hardcell schreef op woensdag 29 juni 2005 @ 15:08:
hmjah, zoals al in mijn ps stond vermeld, gezien de toepassing van deze webapplicatie is dit geen optie helaas..
Maar je hebt neem ik aan een eis staan tav. het aantal tekens per regel, en het max. aantal regels.
Dan kun je wel splitten op \n en dan per array item kijken of de lengte binnen de perken valt, zoniet knip de rest weg / maak een nieuwe regel aan / verzin zelf iets :P

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var linesArr = text.split('\n');
var noLines = linesArr.length;

for (i=0;i<noLines;i++)
{
    if (linesArr[i].length > maxChars)
    {
        for (j=noLines;j>i;j--)
            linesArr[j] = linesArr[j-1];
        linesArr[i+1] = linesArr[i].substr(maxChars+1,linesArr[i].length);
        linesArr[i] = linesArr[i].substr(0,maxChars);
        noLines++;
    }
}


met dit lusje kom ik al een heel eind. :P

enja, ik heb idd een eis met maximum aantal regels en maximum aantal karakters per regel.

[ Voor 14% gewijzigd door Hardcell op 29-06-2005 15:57 ]


  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
Dat kan dan toch op 'mijn' manier veel makkelijker?
code:
1
2
3
4
var linesArr = text.split('\n');
var noLines = 0;
for (i=0;i<noLines;i++)
    noLines += Math.ceil(linesArr[i].length / maxLineLength)

of zoiets uit mijn mouw geschud (even ervanuitgaande dat de ceil-functie iun JS in de Math-class staat)?

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
jah een ander probleem is dat ik als het maximum aantal regels overschreden wordt alle regels die boven het maximum zitten er vanaf wil knippen dus vandaar dat k het in een arraytje wil bijhouden.
Bugt nog ietwat maar kga er wel komen denk k!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
hmm kut,

dat afkappen na maxChars gaat niet lukken, moet toch op zoek naar de laatste spatie in die regel anders kaptie woorden middendoor!! :(

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Hardcell schreef op woensdag 29 juni 2005 @ 16:08:
hmm kut,

dat afkappen na maxChars gaat niet lukken, moet toch op zoek naar de laatste spatie in die regel anders kaptie woorden middendoor!! :(
Je kunt er ook voor kiezen alles gewoon hard af te kappen, de gebruiker daar melding van te doen en het hem/haar zelf laten oplossen.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
aangezien wij geld krijgen van onze gebruikers willen we ze het graag zo makkelijk mogelijk maken ;)

zodra ik een oplossing heb komtie hier te staan!

  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

En die oplossing met scrollHeight die ik noemde?

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
André schreef op woensdag 29 juni 2005 @ 16:17:
En die oplossing met scrollHeight die ik noemde?
hier zit je weer met het probleem van de laatste regel wegknippen he. je weet niet waar die begint dus je weet ook niet vanaf waar je mag knippen wanneer de gebruiker eroverheen tiept / plakt..

  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

Hardcell schreef op woensdag 29 juni 2005 @ 16:22:
[...]


hier zit je weer met het probleem van de laatste regel wegknippen he. je weet niet waar die begint dus je weet ook niet vanaf waar je mag knippen wanneer de gebruiker eroverheen tiept / plakt..
Jawel, gewoon een lusje die steeds de laatste letter weghaalt net zo lang tot de scrollHeight weer goed staat :)

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Ben nu met die scrollHeight aant stoeien maar ik krijg vage waardes terug van dat ding. In firefox blijft de scrollheight idd gewoon dezelfde waarde tot ik 'buiten' de textarea ben, dus over het aantal gestelde 'rows'. Maar internet explorer geeft bij iedere regel waar ik op sta een andere scrollHeight terug. Heeft dit te maken met die disabled scrollbar wat ik ook niet weg krijg aan de rechterkant?

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Hardcell schreef op woensdag 29 juni 2005 @ 16:15:
aangezien wij geld krijgen van onze gebruikers willen we ze het graag zo makkelijk mogelijk maken ;)

zodra ik een oplossing heb komtie hier te staan!
Maar als je een regel afkapt op het laatste woord dan heb je 2 problemen:

- wat nou als de gebruiker veel afkortingen achter elkaar gebruikt waar geen spaties maar bijv. punten of komma's tussenstaan, of ander leestekengegoochel?
- als je het hele laatste woord weghaalt, ziet de gebruiker niet meer wat ie oorspronkelijk op die plek heeft getypt

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
maar zoals uit mijn vorige post blijkt ben ik inmiddels weer overgestapt op de scrollHeight-methode dus met dat afkappen heb ik zo nix meer te maken..

graag wat meer info over die scrollHeight want ik snap niet hoe internet explorer aan die waardes komt..

ps: aan die disabled scrollbar in ie ligt het iig niet want die is inmiddels weggewerkt! :9

[ Voor 16% gewijzigd door Hardcell op 30-06-2005 12:53 ]


  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function checkMsgLength(textEl)
{
    var fontIndex = document.getElementById('font_type').selectedIndex;
    var maxLines = fontArray[fontIndex]['rows'];
    var sh = textEl.scrollHeight;
    var maxSh = maxLines * 14 + 2;

    if (sh>maxSh)
    {
        alert('Maximum aantal regels (' + maxLines + ') overschreden!');
        while (sh>maxSh)
        {
            textEl.value = textEl.value.substr(0, textEl.value.length-2);
            sh = textEl.scrollHeight;
        }
    }
}


zo'n lusje voor het controleren met de scrollheight was idd redelijk makkelijk te schrijven alleen een nieuw probleem!
als ik de laatste regels wis zonder de newlines weg te halen (dus niet een regel omhoog backspacen) dan gaat hij over zijn maximum heen zodra ik bovenin het bericht enters geef. Makkelijker gezegt, er schuiven lege regels buiten de textarea die hij eigenlijk niet mee moet tellen. Ben nu al een paar uur aant proberen deze eraf te knippen voor hij deze lus uitvoerd maar dat wil nog niet echt..
Zijn hier niet toevallig al js-functies voor?
Pagina: 1