Avatar billede jonashn Nybegynder
04. juni 2006 - 13:57 Der er 1 kommentar og
1 løsning

"Highlighting af input"-fejl.

Hej Alle!

Jeg har et sindsygt irriterende problem, som jeg ikke kan finde årsagen til.
Jeg har flg. kode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Nyt dokument</title>
<meta name="generator" content="TSW WebCoder">
</head>

<body>

<script type="text/javascript">
debugCount=0;
String.prototype.debug= function() {
document.getElementById("debug").innerHTML+=debugCount+": "+this+'\n<br>';
++debugCount;
}

String.prototype.contains= function(arg) {
    for(i=0;i<this.length;i++)
        if(this.substring(i,i+arg.lenght)==arg) return true;
    return false;
}
function sub() {
    //init
    area=document.forms[0].cont;
    obj=document.getElementById("io");
    obj.innerHTML="";
    lines=area.value.split('\n');
    table="<table style=\"border: none\">";
    for(i=0;i<lines.length;i++)
    {
        dbg="i: "+i;
        dbg.debug();
        table+="<tr>";
        if(lines[i].contains(":")) //linien er en 'person: besked' formateret streng.
        {
            table+="<td><b>"+lines[i].split(':')[0]+":</b></td>";
            table+="<td>"+lines[i].split(':')[1]+"</td>";
        }
       
        else
        {
            table+="<td></td><td>"+lines[i]+"</td>";
            table+="</tr>";
        }
    }
    table+="</table>";
    obj.innerHTML=table;
}
</script><form>
<table border="0"><tr>
<td>
<textarea style="font-family: arial;" name="cont" cols="100" rows="25" onkeyup="if(event.keyCode==13)this.value+='\n'">
En kommentar der ikke skal køres igennem linie 33;
person: hej js.
andenPerson: blabla
test: hej
</textarea></td><td valign=top><span style="font: normal normal bold 12px normal monospace;">Debug</span><br><span id="debug" style="font-family: monospace; font-size: 12px;"></span>
</td></tr>
<tr><td>
<button onclick="sub();">Formater</button
</form></td>
</tr>
</table>
<br>

<span id="io"></span>
</body>
</html>

Jeg tager det fra en ende af, så alle kan følge med.

string.prototype.debug gør at man kan "fejl".debug(). debugnummer+"fejl" vises så i debug-spannet som er under textareaet.

string.prototype.contains returnerer true hvis strengen indeholder argumentet, ellers false.

bagefter kommer sub() som køres når der klikkes på "formater".
den opretter area og obj som tekstareaet og io-spannet.

Den følgende løkke skal køre alle linier i textareaet igennem. Hvis en linie indeholder ":" går jeg ud fra at det er en linie formateret som "jonas: hej" (altså en replik). Hvis det er det lægges en row ind i tabellen der fremhæver jonas og putter hej ind i den 2. td.

Hvis IKKE at linien er af formatet jonas: hej, men i stedet for en kommentar, lægges kommentaren ind i td nr.2.

herefter lægges table ind i io-spannet.


Før virkede programmet nogenlunde, bortset fra at i (variablen) hele tiden ændrede sig til f.eks. 50.

Nu vil løkken kun gennemløbe en linie, og udskrive 'undefined' til table'n.

Programmet er til formatering af en sketch.

Håber at jeg har formuleret mig klart nok.
Avatar billede olebole Juniormester
04. juni 2006 - 15:54 #1
<ole>

Hvad skal du bruge 'contains' til, når nu JS altid har haft 'indexOf' indbygget?
Jeg er ikke helt med på forklaringen - men det lyder somom du bør have gang i en alert og finde udaf, hvor fejlen opstår  :)

/mvh
</bole>
Avatar billede jonashn Nybegynder
04. juni 2006 - 17:45 #2
Har ikke findet fejlen, men nu virker det :D
Jeg havde glemt indexOf :[
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