Avatar billede pvtsommer Nybegynder
19. juni 2006 - 20:57 Der er 36 kommentarer og
1 løsning

Max antal linjer i Textarea?

Hej alle,

Jeg søger en funktion, som gør at man maximum kan have x-antal linjer i et textarea.

Er dette overhovedet muligt?

Fx. er det planen at der max må være 5 linjer, og så skal det helst ikke være muligt at skrive mere end netop de fem linjer, før man får en fejl.

Såfremt overstående er muligt, er det så muligt at hver linje fx kun må have 50 bogstaver i bredden? Denne er knap så vigtig dog.

Det ville jo være brilliant hvis cols og rows kunne klare dette for mig, men desværre.

Alternativt overvejer jeg at lave så man vælger hvor mange linjer man vil have, og så får 5 input bokse, hvis man vælger 5 linjer. Det er bare ikke helt så brugervenligt :S
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:04 #1
Hvad med bare at have et div element med en en foruddefineret tekststørrelse - hvor så javascriptet måler på første linje i boksen, og viser indholdet af indtastningen efterhånden som man indtaster og bremser indtastning når maks antal linjer overskrides? - Det skulle jo mere passe med den boks du vil have indholdet i - eller er det mere et spørgsmål om max tegn i databasen ... tænker på noget kode lignende det fra denne her: http://www.eksperten.dk/spm/700332 (tilrettet lidt selvfølgelig)
Avatar billede pvtsommer Nybegynder
19. juni 2006 - 22:30 #2
Hej mclemens,

I bund og grund kunne det godt være en løsning den du har der!

For faktisk er det et spørgsmål om hvor mange pixels den maksimalt må være på. Og det ville være PERFEKT hvis den ligefrem kunne lave bare en cirka beregning på dette inden den postes, som planen er.

Problemet er at jeg ikke har en dyt forstand på Javascript (dvs. jeg kan tilrette en lille smule, men overhovedet ikke lave noget i den dur).

Er det noget du eventuelt vil hjælpe mig med? Så vil jeg være dig evigt taknemmelig :) - Det er en af de eneste ting som mangler, inden jeg kan søsætte mit nye projekt. Og din idé virker til at være en god løsning.

Jeg kan eventuelt lige opstille et regelsæt:
- Max 150px i bredden
- Max 100px i højden
- Max 150 tegn i alt*

* Hvis det er muligt må der gerne integreres en tæller, som tæller ned fra 150 til 0, efterhånden som man skriver.
** Samtidig må det gerne være nogle variabler som jeg selv kan ændre let og simpelt.

Der bruger jeg pt. (jeg tror det var olebole der havde skrevet indlægget herinde engang)

function myCount(elm) {
    var myMax = 150, displ = document.getElementById('gnu');
    displ.innerHTML = elm.value.length;
    displ.style.color = (elm.value.length>=myMax)? "red" : "";
    if (elm.value.length>myMax) {
        elm.value = elm.value.substr(0, myMax);
        displ.innerHTML = myMax;
        alert("Please notice that you are limited to maximum 150 characters!!");
        return false;
    }
}

som så opdaterer: <b id="gnu">0</b>

Noget du kan/vil/har tid til at hjælpe mig med? :)
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:35 #3
Har ikke læst indlægget gør det nu men kig lige på denne imens...



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:300px;background:#aaa;height:100px;}
#inpchkout{width:300px;border:1px solid #aaa;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow;
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;

}


function inptrans(){

ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;

if(ico.clientWidth>icow)alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)){
  ici.childNodes[0].nodeValue=ici.childNodes[0].nodeValue.substr(0,ici.childNodes[0].nodeValue.length-1);
  ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;
}

}

</script>




</head><body>

<textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea><br>

<div id="inpchkout">Denne boks viser den tekst du indtaster...</div>

</body></html>
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:38 #4
[ ** Samtidig må det gerne være nogle variabler som jeg selv kan ændre let og simpelt. ]
- Du ændrer bare antal linjer, og style ico div'en med tekststørrelsen - height beregnes ud fra fontstørrelsen da enkelte browsere kan justere tekststørrelsen op eller ned - det anbefales dog at "låse" font størrelsen ved at definere en font og en font-størrelse i px ... skal jeg kigge på max tegn?
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:40 #5
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:300px;background:#aaa;height:100px;}
#inpchkout{width:300px;border:1px solid #aaa;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow;
var icol=5; // Antal linjer
var icole=150; // Max (5 linjer p.t. eller 150 tegn)


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;

}


function inptrans(){

ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;

if(ico.clientWidth>icow)alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

if(ico.childNodes[0].nodeValue.length>icole)alert("Teksten har overskrevet max antal tegn den vil nu blive forkortet");

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.childNodes[0].nodeValue.length>icole)){
  ici.childNodes[0].nodeValue=ici.childNodes[0].nodeValue.substr(0,ici.childNodes[0].nodeValue.length-1);
  ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;
}

}

</script>




</head><body>

<textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea><br>

<div id="inpchkout">Denne boks viser den tekst du indtaster...</div>

</body></html>


^ Den har max antal tegn...
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:41 #6
- Max 100px i højden
... vil du have højden blokeret på px istedet for linjer?
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:44 #7
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;height:100px;border:1px solid #aaa;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow;
var icole=150; // Max (5 linjer p.t. eller 150 tegn)


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;

}


function inptrans(){

ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;

if(ico.clientWidth>icow)alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

if(ico.clientHeight>icoh)alert("Teksten har overskrevet max højde den vil nu blive forkortet");

if(ico.childNodes[0].nodeValue.length>icole)alert("Teksten har overskrevet max antal tegn den vil nu blive forkortet");

while((ico.clientHeight>icoh)||(ico.clientWidth>icow)||(ico.childNodes[0].nodeValue.length>icole)){
  ici.childNodes[0].nodeValue=ici.childNodes[0].nodeValue.substr(0,ici.childNodes[0].nodeValue.length-1);
  ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;
}

}

</script>




</head><body>

<textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea><br>

<div id="inpchkout">Denne boks viser den tekst du indtaster...</div>

</body></html>

^ Max højde og width via style i css og max tegn via variabel
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:47 #8
Kigger lige på en tæller til dig også ;o)
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:49 #9
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;height:100px;border:1px solid #aaa;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Max (5 linjer p.t. eller 150 tegn)


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;

}


function inptrans(){

ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.childNodes[0].nodeValue.length;

if(ico.clientWidth>icow)alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

if(ico.clientHeight>icoh)alert("Teksten har overskrevet max højde den vil nu blive forkortet");

if(ico.childNodes[0].nodeValue.length>icole)alert("Teksten har overskrevet max antal tegn den vil nu blive forkortet");

while((ico.clientHeight>icoh)||(ico.clientWidth>icow)||(ico.childNodes[0].nodeValue.length>icole)){
  ici.childNodes[0].nodeValue=ici.childNodes[0].nodeValue.substr(0,ici.childNodes[0].nodeValue.length-1);
  ico.childNodes[0].nodeValue=ici.childNodes[0].nodeValue;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.childNodes[0].nodeValue.length;
}

}

</script>




</head><body>

<textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Denne boks viser den tekst du indtaster...</div>

</body></html>

^ Max højde og width via style i css og max tegn via variabel og automatisk tæller
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:50 #10
Vil du have automatisk backup felt der dukker op ved fejlindtastning så man kan kopiere det tidligere så sig lige til - så jeg ikke bare spammer løs...
Avatar billede pvtsommer Nybegynder
19. juni 2006 - 22:54 #11
Hov jov... min fejl... Det skal være linjer og ikke pixels! Mig der skriver forkert. Bredden skal dog være i pixels...

Skal lige læse alle dine indlæg dog :D To sek..
Avatar billede pvtsommer Nybegynder
19. juni 2006 - 22:55 #12
Ps. Din sidste kode virker ikke i Firefox? :/
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:55 #13
kigger på den...
Avatar billede pvtsommer Nybegynder
19. juni 2006 - 22:58 #14
Når man tømmer boksen, laver den i øvrigt en:

Line 29
Error: ici.childNodes.0.nodeValue is null or not an object.
Avatar billede mclemens Nybegynder
19. juni 2006 - 22:59 #15
- Jeps, tyder på at jeg ikke får fat i den rigtige child i FF ...
ikke så godt når man kører derudaf i IE ... kigger på den ...
Avatar billede pvtsommer Nybegynder
19. juni 2006 - 23:00 #16
Kan godt lide at den ikke tager højde for linjeskift i selve textarea'et! Fanme perfekt!
Avatar billede inctor Nybegynder
19. juni 2006 - 23:02 #17
Man skal da ikk prøve på at lave en tekst felt værdi på 2000 tegn .. Det er den lidt slow til at slette .. :P
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:04 #18
- Ja, men det er jo DIN browser det går ud over og hvis der er en der skriver 2000 tegn er det jo nok hans egen problem hvis han har fået at vide at max er 150 tegn... - jeg skal dog nok få den til at slette alle tegn ned til 150 seperat istedet her når jeg får den til at virke i FF...
Avatar billede inctor Nybegynder
19. juni 2006 - 23:07 #19
HVad står dne da til nu ? at slette alt fra tegn 151 og opefter ?
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:19 #20
@pvtsommer: Har fået overførsel af tegn til at virke i FF nu,  men mangler: Check på width og height da den giver problemer ... poster lige en der ikke dutter så du kan se det problem jeg kigger på p.t.... Den med den fejl ved 0 tegn retter jeg også lige... og putter hurtig reduction af tegn på - inden jeg går videre med højde og bredde validering...
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:20 #21
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;height:100px;border:1px solid #aaa;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Max (5 linjer p.t. eller 150 tegn)


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;

}


function inptrans(){

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value;

if(ico.clientWidth>icow)alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

if(ico.clientHeight>icoh)alert("Teksten har overskrevet max højde den vil nu blive forkortet");

if(ico.childNodes[0].nodeValue.length>icole)alert("Teksten har overskrevet max antal tegn den vil nu blive forkortet");

while((ico.clientHeight>icoh)||(ico.clientWidth>icow)||(ico.childNodes[0].nodeValue.length>icole)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Denne boks viser den tekst du indtaster...</div>

</body></html>

^ Hov, glemte at poste den der var fejl på, her er den
pvtsommer, som du ser skal den lige have en bearbejdning...
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:21 #22
Første fejl:
function inptrans(){

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value;

->

function inptrans(){

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:28 #23
Lidt mere med tekststrengs længde validering og reduktion
... dog mangler det væsentlige i FF - højde & bredde kontrol...


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;height:100px;border:1px solid #aaa;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=50; // Max (5 linjer p.t. eller 150 tegn)


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;

}


function inptrans(){

//icotxt=""+ici.value;

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if(ico.clientWidth>icow)alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

if(ico.clientHeight>icoh)alert("Teksten har overskrevet max højde den vil nu blive forkortet");

if(ico.childNodes[0].nodeValue.length>icole){
alert("Teksten har overskrevet max højde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

while((ico.clientHeight>icoh)||(ico.clientWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Denne boks viser den tekst du indtaster...</div>

</body></html>
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:29 #24
(hov har slettet validering på 5 linjer og kørt på højde)
-- 19/06-2006 22:54:14 , retter det lige tilbage...
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:37 #25
Lidt mere, dog er der en dobbelt alert i FF og så mangler bredden lige et "puf"



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
alert(icoh);
}


function inptrans(){

//icotxt=""+ici.value;

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if(ico.clientWidth>icow)alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

else if(ico.childNodes[0].nodeValue.length>icole){
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:43 #26
Lidt mere ;o)



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;overflow:auto;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
}


function inptrans(){

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if((ico.clientWidth>icow)||(ico.scrollWidth>icow))alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

else if(ico.childNodes[0].nodeValue.length>icole){
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.scrollWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:45 #27
Hov stadig lidt bøvl ved 2000 tegn kigger på det :D
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:48 #28
Sådan, omrokering/oprytning og en true/false er altid godt :o)




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;overflow:auto;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
}


function inptrans(){

tmpchk=true;

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if(ico.childNodes[0].nodeValue.length>icole){
tmpchk=false;
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

else if((ico.clientWidth>icow)||(ico.scrollWidth>icow))alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

if(tmpchk)while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.scrollWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede mclemens Nybegynder
19. juni 2006 - 23:50 #29
Sådan den skulle i nogle tilfælde løbe igennem box'en igen ... spørgsmålet er så skal jeg prøve at gøre nogle af de mange alerts lidt betinget eller skal vi bare slette dem pvtsommer?





<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;overflow:auto;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
}


function inptrans(){

tmpchk=true;

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if(ico.childNodes[0].nodeValue.length>icole){
tmpchk=false;
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
inptrans();
}

else if((ico.clientWidth>icow)||(ico.scrollWidth>icow))alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

if(tmpchk)while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.scrollWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede mclemens Nybegynder
20. juni 2006 - 00:12 #30
@inctor - Glemte at sige tak for tippet med det tegn reduktion (var lidt optaget af hvorfor den ikke virkede i FF da du nævnte det) ... det var lidt af et knokle arbejde at sætte browseren til at fjerne et tegn ad gangen :D - så tak for hentydningen ;o)




@pvtsommer IE kan vist bedre lide den uden den chk variabel ... men stadig skal jeg se om jeg kan reducere de alerts - eller skal vi bare slette dem?
- Evt. kan der også bare dukke et felt op med en besked i øverste højre hjøre med en besked om det - evt. med box'ens tidligere indhold ... og selvfølgelig en "luk" knap... - den kan evt. også sættes til at lukke automatisk straks man skriver i feltet igen ... anyhow - jeg hopper nok til køjs om lidt ... men, ellers så skrives vi ved imorgen :o)


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;overflow:auto;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
}


function inptrans(){

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if(ico.childNodes[0].nodeValue.length>icole){
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole-1);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

else if((ico.clientWidth>icow)||(ico.scrollWidth>icow))alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.scrollWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede mclemens Nybegynder
20. juni 2006 - 00:15 #31
- Lige en sidste uden alle de dobbelt alerts i FF...



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;overflow:auto;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.childNodes[0].nodeValue="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
}


function inptrans(){

ici.onchange="";

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if(ico.childNodes[0].nodeValue.length>icole){
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole-1);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

else if((ico.clientWidth>icow)||(ico.scrollWidth>icow))alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.scrollWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

ici.onchange=function(){inptrans();};

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede mclemens Nybegynder
20. juni 2006 - 00:19 #32
En tand pænere med sletning af textbox indholdet i FF også - samt en
overflow:hidden på div'en istedet for auto ... det ser en del pænere ud :o)



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;overflow:hidden;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.value="";ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
}


function inptrans(){

ici.onchange="";

ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;

if(ico.childNodes[0].nodeValue.length>icole){
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole-1);
ico.childNodes[0].nodeValue=ici.value;
inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

else if((ico.clientWidth>icow)||(ico.scrollWidth>icow))alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.scrollWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value;
  inpc.childNodes[0].nodeValue="Antal tegn: "+ici.value.length;
}

ici.onchange=function(){inptrans();};

}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede mclemens Nybegynder
20. juni 2006 - 01:16 #33
Der var lidt fejl ved mellemrum først og ingen
tegn som du selv var inde på ... denne her burde
rette lidt op på det ... håber du finder ned til
bunden her på uden at få ondt i hånden af at scrolle :D


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#inpchkin{width:150px;background:#aaa;height:100px;}
#inpchkout{width:150px;border:1px solid #aaa;overflow:hidden;}
</style>

<script type="text/javascript">
var ico,ici,icoh,icow,inpc;
var icole=150; // Antal tegn
var icol=5; // Antal linjer


window.onload=function(){

ici=document.getElementById("inpchkin");
ico=document.getElementById("inpchkout");
inpc=document.getElementById("inpcount");
inpc.childNodes[0].nodeValue="Antal tegn tilbage: "+(icole-ici.value.length);

ici.onkeyup=function(){inptrans();};
ici.onchange=function(){inptrans();};
ici.onfocus=function(){this.value="";inptrans();ici.onfocus="";};

icoh=ico.clientHeight;icow=ico.clientWidth;
}


function inptrans(){

ici.onchange="";

ico.childNodes[0].nodeValue=ici.value.replace(/ /,"\u00a0");
inpc.childNodes[0].nodeValue="Antal tegn tilbage: "+(icole-ici.value.length);

if((ici.value.length==0)||(ico.offsetHeight<icoh))ico.childNodes[0].nodeValue="\u00a0";

if(ico.childNodes[0].nodeValue.length>icole){
alert("Teksten har overskrevet max længde den vil nu blive forkortet");
ici.value=ici.value.substr(0,icole);
ico.childNodes[0].nodeValue=ici.value.replace(/ /,"\u00a0");
inpc.childNodes[0].nodeValue="Antal tegn tilbage: "+(icole-ici.value.length);
}

else if((ico.clientWidth>icow)||(ico.scrollWidth>icow))alert("Boksen er blevet bredere da du har indtastet en linje uden mellemrum eller et meget langt ord - teksten i boksen vil nu blive forkortet indtil boksen holder sin bredde igen");

else if(ico.clientHeight>(icoh*icol))alert("Teksten har overskrevet max antal linjer den vil nu blive forkortet");

while((ico.clientHeight>(icoh*icol))||(ico.clientWidth>icow)||(ico.scrollWidth>icow)){
  ici.value=ici.value.substr(0,ici.value.length-1);
  ico.childNodes[0].nodeValue=ici.value.replace(/ /,"\u00a0");
  inpc.childNodes[0].nodeValue="Antal tegn tilbage: "+(icole-ici.value.length);
}

ici.onchange=function(){inptrans();};


}

</script>




</head><body>

<form><textarea id="inpchkin" name="S1">Indtast din tekst her. Dog må den max. fylde 5 linjer i boksen, der vises nedenunder...</textarea></form><br>
<div id="inpcount">Antal tegn:</div>
<div id="inpchkout">Teksten...</div>

</body></html>
Avatar billede pvtsommer Nybegynder
20. juni 2006 - 11:01 #34
Heya !

Du har jo løst mit problem 10 gange bedre end jeg selv havde overvejet. Fanme smukt :)

Smid du et svar, og jeg forhøjer til 200 point :P
Avatar billede mclemens Nybegynder
20. juni 2006 - 11:20 #35
Super, her er lige et svar :o)
Avatar billede pvtsommer Nybegynder
20. juni 2006 - 11:40 #36
Jeg takker :)
Avatar billede mclemens Nybegynder
20. juni 2006 - 11:43 #37
Velbekom, og tak for point :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