"Meco" <meco@ofir.dk> writes:
> Hvordan kan det være, nedtællingen der virker fint i IE, ikke virker i
> FireFox - Nogle forslag ?
....
> .js:
>
> <!--
Drop "<!--" og "-->" omkring javascript. *Specielt* i separate js-filer!
> function taLimit() {
> var taObj=event.srcElement;
For at være standard-overholdende, så brug:
function taLimit(event) {
var taObj = event.target || event.srcElement; // IE
Eller bare giv elementet med direkte, du har det der hvor
metoden kaldes:
function taLimit(taObj) {
> if (taObj.value.length==taObj.maxLength*1) return false;
Jeg foretrækker mere læselige måder at oversætte fra tekst til
tal, fx Number. Du kan også direkte returnere resultatet af
sammenligningen som en boolean. Og tjek om længden er større
end eller lig med, ikke bare lig med, så du også fanger
paste der indsætter mere end et tegn.
I.e.:
var maxLength = Number(taObj.maxLength);
var length = taObj.value.length;
return length < maxLength;
Et stort problem med denne tilgangsvinkel er at du cancel'er alle
tastetryk når textarea'et er fuldt. Også delete-tast, så man kan ikke
slette noget igen. Jeg kan ikke se en nem måde at forhindre det på.
Tænk også på situationen hvor textarea'et er fuldt og man har selected
noget tekst, og så trykker på et bogstav. Det skal helst virke, men for
at vide det skal man have gang i browserens specielle måde at se om der
er en selection på, og hvor stor den er, etc. Slet ikke nemt.
Bemærk også at et textarea ikke har en maxLength-egenskab i DOM'en
(eller en maxLength-attribut i HTML).
<URL:
http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-24874179>
Du skal selv have tilføjet taObject.maxLength, den hvis den skal være
der (eller løbe an på en ikke-standard browser-opførsel).
Ellers kan du prøve:
var maxLength = Number(taObject.getAttribute("maxLength"));
der prøver at læse en HTML-attribut, selvom den ikke hører til i
HTML-definitionen.
Jeg ville nok bare give grænse med som et argument til funktionerne,
i stedet for at gemme den i en ikke-standard HTML-attribut.
> }
>
> function taCount(visCnt) {
> var taObj=event.srcElement;
function taCount(visCnt, event) {
var taObj = event.target || event.srcElement;
eller
function taCount(visCnt, taObj) {
> if (taObj.value.length>taObj.maxLength*1) {
> alert('Du har overskredet grænsen på '+taObj.maxLength+' tegn');
> taObj.value=taObj.value.substring(0,taObj.maxLength*1);
> }
> if (visCnt) visCnt.innerText=taObj.maxLength-taObj.value.length;
innerText er ikke generelt understøttet så godt som innerHTML er. Jeg
ville bruge innerHTML (eller rigtige standardiserede DOM-metoder).
Du returnerer ikke en værdi fra taCount, men jeg kan se at du forsøger
at bruge den i HTML'en.
> }
> -->
(og som sagt, ingen HTML-kommentarer i javascript!)
> .html:
>
> <td colspan="3" width="314"><textarea class="formu" name="kommentar"
> cols="49" rows="4"
> onkeypress="return taLimit()" onkeyup="return taCount(MeddelelseCounter)"
Du bruger "MeddeleseCounter" som om det var en variabel. Det kan du ikke
garantere at det er. For at finde et element med en id, skal du bruge
document.getElementById.
onkeypress="return taLimit(event);"
eller, for at sende taObj med som argument,
onkeypress="return taLimit(this);"
og
onkeyup="taCount(document.getElementById('MeddelesCounter'), event);"
eller, for at sende taObj med som argument,
onkeyup="taCount(document.getElementById('MeddelesCounter'), this);"
(ingen brug for return, da du ikke returnerer noget fra taCount).
> maxLength="140"></textarea>
Et HTML textarea har ikke en maxlength-attribut. Det har input-elementer.
> Du har <b><span id="MeddelelseCounter">140</span></b> tegn tilbage i din
> beskrivelse.<br>
> </td>
Jeg vil anbefale *ikke* at forhindre tastetryk, men holde sig til at
give en advarsel hvis indholdet bliver for stort. Så kan du disable
submit-knappen indtil teksten har den rigtige størrelse igen:
<form action="">
<textarea
onkeyup="var length = this.value.length;
var tooLarge = length > 140;
this.style.border = tooLarge ? '2px solid yellow' : '';
this.form.elements['go'].disabled = tooLarge;
document.getElementById('left').innerHTML = tooLarge ?
(length - 140) + ' for mange'
: 140-length;
"
></textarea>
<input type="submit" name="go" value="Go!">
<br>
<p>Tegn: <span id="left">140</span>
</form>
Hyg!
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'