Avatar billede svekn Nybegynder
13. december 2001 - 14:06 Der er 17 kommentarer og
1 løsning

Antal linier i et \"TEXTAREA\" felt

Er det muligt at tælle, hvor mange linier man har tastet i et \"TEXTAREA\" felt.
Avatar billede lerchedahl Nybegynder
13. december 2001 - 14:10 #1
du kan tælle antal tegn og dividere med \'maxlength\'...
Avatar billede lerchedahl Nybegynder
13. december 2001 - 14:43 #2
sorry, jeg koger! Du kan ikke bruge \'maxlength\' attributten på et \'textarea\'...

Du kan ikke lige sådan i et snuptag tælle antallet af linier i et textarea, men du kan, som sagt, tælle antallet af tegn:

<TEXTAREA onblur=count.value=this.value.length></TEXTAREA>

...og så vise det med:

<INPUT type=\"text\" id=count name=count readonly>

/lerchedahl
Avatar billede svekn Nybegynder
13. december 2001 - 14:57 #3
Jeg er interesseret i at vide hvor mange linier der i er brugt i \"TEXTAREA\", at tælle antal tegn var noget jeg godt kunne finde ud af i forvejen.
Avatar billede lerchedahl Nybegynder
13. december 2001 - 15:06 #4
Det kan du ikke gøre clientside...
Avatar billede lerchedahl Nybegynder
13. december 2001 - 15:17 #5
Btw... Du skal lige være opmærksom på hvordan du definerer \'linier\' i dit textarea... Antallet af linier kan fortolkes på forskellige måder, \'wrap\' attributten taget i betragtning... Hvis der er softbreak i dit textarea, vil outputtet jo se anderledes ud, hvis du kalder det, end det ser ud på særmen... Der bliver linjeskift i dit textarea nemlig ikke konverteret...
Avatar billede svekn Nybegynder
13. december 2001 - 15:28 #6
Jeg har selv fundet løsningen, men ellers tak for ulejligheden.
Avatar billede lerchedahl Nybegynder
13. december 2001 - 15:31 #7
Nu bliver jeg nysgerrig... hvad gjorde du?
Avatar billede svekn Nybegynder
13. december 2001 - 15:58 #8
Jeg har ikke lige fået den pudset helt af, og da jeg skal hjem fra arbejd nu, så må jeg lige vende tilbage med løsningen i morgen. Men den virker kun hvis der er tale om Hard Wrap.
Avatar billede jakoba Nybegynder
13. december 2001 - 16:24 #9

var tmp = felt.value.replace( /\\n/, \"xx\" );  // tilføj et bogstav pr linieskift
var antalLinier = tmp.length -felt.value.length;

mvh JakobA
Avatar billede simonfreiesleben Nybegynder
02. maj 2005 - 18:27 #10
Hey jakoba
Jeg kan ikke lige regne alle de tegn ud inde i replace funktionen. Men hvad gør du så med teksten bagefter? Det dur vel ikke at ændre i teksten?

Simon
Avatar billede jakoba Nybegynder
02. maj 2005 - 18:43 #11
variabelen tmp er en ny variabel der får det ændrede feltinghold, så selve feltet ændres slet ikke.
  /\\n/  er en regular expression der leder efter  \n  dvs linieskift i strengen, der skal tilføjes et ekstra \ foran \n for sikre at javascript fortolkeren sender præcis \n videre til den javascript funktion der fortolker regular expressions.
  "xx" bliver indsat istedet for linieskiftet, dvs 2 bogstaver indsættes hvor der før var et, så strengen i temp er altså 'antal lineskift' længere end den uændrede streng i feltet.

  De \ tegn der står foran " i  \"xx\"  skal du ignorere, de stammer fra en fejl der var på eksperten en tid det korrekte der skal skrives i koden er blot:
          felt.value.replace( /\\n/, "xx" );

Strenghåndtering er ret uoverskuelig i begyndelsen (og fejl gør det ikke bedre), men der er faktisk mening i galskaben.

mvh JakobA
Avatar billede simonfreiesleben Nybegynder
02. maj 2005 - 21:41 #12
Blæret. Tak!!
Avatar billede simonfreiesleben Nybegynder
02. maj 2005 - 22:32 #13
Hmm. Jeg kan ikke få den til at tælle mere end et linieskift.

Jeg kalder denne funktion på onkeyup

function addline(felt) {
    eval("tmp = document.forms[0]." + felt + ".value.replace( /\\n/, \"xx\" );");
    eval("antalLinier = tmp.length - document.forms[0]." + felt + ".value.length;");
    eval("document.forms[0]." + felt + ".rows = antalLinier + 1;");
    alert(tmp);
}

Den erstatter første gang, men de næste linieskift reagerer den ikke på. Er der noget tydeligt galt her?

mvh

Simon
Avatar billede jakoba Nybegynder
02. maj 2005 - 22:46 #14
Jeg afskyer eval funktionen, lad os skrive så det kan læses:

function addline(felt) {
    var tmp = document.forms[0][ felt ].value.replace( /\\n/, "xx" );
    var antalLinier = tmp.length - document.forms[0][ felt ].value.length;
    document.forms[0][ felt ].rows = antalLinier + 1;
    alert(tmp);
}

Og jeg tror det var din eval der gjorde det. ved at skrive  /\\n/  ind i en streng der skal eval(uere)s bliver der endnu et sted det bliver fortolket så de to \ tegn skal beskyttes hver for sig. Hvis du ønsker at beholde din eval kunne du evt sige:
    eval("tmp = document.forms[0]." + felt + ".value.replace( /\\\\n/, \"xx\" );");

men som sagt ovenfor vil jeg anbefale du undgår eval() funktionen, Der har kun været en enkelt gang i al den tid jeg har lavet javaskripts den egentlig var nødvendig.

mvk JakobA
Avatar billede simonfreiesleben Nybegynder
03. maj 2005 - 00:08 #15
Hej JakobA
Jeg kan desværre stadig ikke få det til at virke. Først virkede det slet ikke. Jeg har ændret resExp til /\n/,"xx"
altså fjernet en backslash før n'et. Nu er jeg tilbage til at den kan fange det første linieskift.
Det næste fanger den ikke. Jeg skal ikke ud i en lykke eller så' noget?

- Simon
Avatar billede jakoba Nybegynder
03. maj 2005 - 00:51 #16
koden finder kun de linieskift du selv laver ved at trykke på retur tasten. hvis du bare skriver derudaf kommer der ikke nogen linieskift selvom brovseren fordeler teksten over flere linier.
Avatar billede simonfreiesleben Nybegynder
03. maj 2005 - 07:13 #17
OK, det skal jeg også have fundet en løsning på. Men jeg synes altså ikke at den finder alle tvungne linieskift. Hun det første...

<html>
<head>
<script>
function addline(felt) {
    var tmp = document.forms[0][ felt ].value.replace( /\n/, "xx" );
    var antalLinier = tmp.length - document.forms[0][ felt ].value.length;
    document.forms[0][ felt ].rows = antalLinier + 1;
    alert(antalLinier);
}
</script>
</head>
<body bgcolor="#f5f5f5">

<form action="anbefal.php?prog_id=<?php echo $prog_id ?>" method="POST"

enctype="application/x-www-form-urlencoded" target="_self">
    <table border="0" cellpadding="0" cellspacing="2" class="g-broedlille" width="100%">

        <tr>
            <td colspan="2" align="left" valign="top" class="g-broed">
            Har der været nogen tekniske ting, der ikke har fungeret?</td>
        </tr>
        <tr>
            <td colspan="2" class="broed" valign="top">
            <textarea name="teknik" style="border:1 solid #000000" cols="80"

rows="1" onkeyup="addline('teknik');"></textarea>
            </td>
        </tr>

        <tr>
            <td class="g-broed" colspan="2" align="right">
                <input name="send" type="button" onclick="tjekmail();"

value="Send">
            </td>
        </tr>
        <tr><td>&nbsp;</td></tr>
        <tr>
            <td align="right" align="right" colspan="2" valign="bottom">
                <a href="#" onClick="window.close();">Luk vindue</a>
            </td>
        </tr>
    </table>
    </form>
</body>
</html>
Avatar billede jakoba Nybegynder
03. maj 2005 - 07:44 #18
Øv, min fejl. jeg havde glemt et 'g' efter regExp'en. (g for global, gør det over hele strengen)

<html>
<head>
<script>
function addline(felt,mode) {
    var tmp = document.forms[0][felt].value.replace( /\n/g, "xx" );
    var antalLinier = tmp.length - document.forms[0][felt].value.length;
    document.forms[0][felt].rows = antalLinier + 1;
    if (mode==1)alert(antalLinier + ": " +tmp);
}
</script>
</head>
<body bgcolor="#f5f5f5">

<form action="anbefal.php?prog_id=<?php echo $prog_id ?>" method="POST"

enctype="application/x-www-form-urlencoded" target="_self">
    <table border="1" cellpadding="0" cellspacing="2" class="g-broedlille" width="100%">

        <tr>
            <td colspan="2" align="left" valign="top" class="g-broed">
            Har der været nogen tekniske ting, der ikke har fungeret?</td>
        </tr>
        <tr>
            <td colspan="2" class="broed" valign="top">
            <textarea name="teknik" style="border:1 solid #000000" cols="80"

rows="1" onkeyup="addline('teknik', 0);"></textarea>
<a href="xx" onclick="addline('teknik', 1);return false;">test</a>
            </td>
        </tr>

        <tr style="background:pink;">
            <td class="g-broed" colspan="2" align="right">
                <input name="send" type="button" onclick="tjekmail();"

value="Send">
            </td>
        </tr>
        <tr><td>&nbsp;</td></tr>
        <tr>
            <td align="right" align="right" colspan="2" valign="bottom">
                <a href="#" onClick="window.close();">Luk vindue</a>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

mvh JakobA
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