Griever: Elemente dynamisch verarbeiten - Geht das auch kürzer?

Hi. Ich habe ja dieses Quizprogramm im Aufbau. Nun hab ich da eine Frage insbezüglich der Quelltextgröße. (möchte es gerne auf eine Diskette speichern können, ohne groß Platz zu verbrauchen. Da zählt jedes Zeichen ...)

Kann man das hier noch etwas "komprimieren". Ich selbst habe von "Nodes" noch nicht allzu viel Ahnung, da ich mich damit nicht befasst habe.

  
function recaptit(x,t) {  
 Kathegorieauswahl.splice(t.xds,1);  
 t.style.color='#ffffff'  
 links++  
 if(links != linksmax)  
 document.getElementById("ACTION").disabled = false;  
 else  
 document.getElementById("ACTION").disabled = true;  
}  
function captit(x,t)  
{  
  Kathegorieauswahl[Kathegorieauswahl.length] = x  
  links--;  
  if(links != linksmax)  
  document.getElementById("ACTION").disabled = false;  
  else  
  document.getElementById("ACTION").disabled = true;  
  if(links==0)  
  {  
    document.getElementById("ACTION").disabled = true;  
    start()  
  }  
  else  
  {  
    t.xds = Kathegorieauswahl.length-1  
    t.style.color='#333333'  
  }  
}  

Und so werden die Funktionen angesprochen:

  
<input type='checkbox' onClick='if(this.checked==true){captit("Kathegorie 1",this)} else {recaptit("Kathegorie 1",this)}'>Kathegorie 1 mit x Fragen</input><br>  

Diese werden dynamisch erzeugt:

  
var links = 0  
var linksmax = 0  
for(var i in qlist)  
{  
  links++;  
  linksmax++;  
  document.write("<input type='checkbox' onClick='if(this.checked==true){captit(\""+i+"\",this)} else {recaptit(\""+i+"\",this)}'>"+i+" mit "+qlist[i].length+" Fragen</input><br>")  
}  

Wäre dankbar für jeden Tipp.

MFG
Griever

  1. Das komplette Paket findet Ihr unter

    LEARNmania

    zum selbstentpacken auf eurer Festplatte.

    Dort könnt Ihr euch den Code mal anschauen. Ich weiß, dass es nicht so schöner Code ist, aber ich muss betonen, dass ich nur auf IE aufbaue.

    Zip-Paket kommt in etwa 1 Stunde nach ...

  2. Hi. Ich habe ja dieses Quizprogramm im Aufbau. Nun hab ich da eine Frage insbezüglich der Quelltextgröße. (möchte es gerne auf eine Diskette speichern können, ohne groß Platz zu verbrauchen. Da zählt jedes Zeichen ...)

    Disketten?
    Welcher Rechner hat sowas denn heute noch?

    [code lang=javascript]
    function recaptit(x,t) {
    Kathegorieauswahl.splice(t.xds,1);

    Was ist  Kathegorieauswahl?
    Warum löscht du das erste Element?
    Suchst du pop() (Arrays fangen immer bei 0 an)
    Was ist das für eine Eigenschaft xds?

    t.style.color='#ffffff'
    links++

    Wo kommt links her?

    if(links != linksmax)
    document.getElementById("ACTION").disabled = false;
    else
    document.getElementById("ACTION").disabled = true;

    Das kann man kürzer schreiben: http://de.selfhtml.org/javascript/sprache/bedingt.htm#entweder_oder

    Oder noch einfacher:

    document.getElementById("ACTION").disabled = (links == linksmax);

    }

    In der ganzen Funktion wird der Parameter x nicht verwendet oder hab ich was übersehen?

    function captit(x,t)
    {
      Kathegorieauswahl[Kathegorieauswahl.length] = x

    Array.push() existiert sogar im IE

    links--;
      if(links != linksmax)
      document.getElementById("ACTION").disabled = false;
      else
      document.getElementById("ACTION").disabled = true;

    s.o.

    if(links==0)

    Das läßt sich kürzer schreiben:

    if(!links)

    {
        document.getElementById("ACTION").disabled = true;
        start()
      }
      else
      {
        t.xds = Kathegorieauswahl.length-1

    Ah, hier ist xds, nur ....

    Diese werden dynamisch erzeugt:

    [code lang=javascript]
    var links = 0
    var linksmax = 0
    for(var i in qlist)
    {
      links++;
      linksmax++;
      document.write("<input type='checkbox' onClick='if(this.checked==true){captit(""+i+"",this)} else {recaptit(""+i+"",this)}'>"+i+" mit "+qlist[i].length+" Fragen</input><br>")
    }

    Wo ist hier das attribut xds?

    Seit wann hat das input Element ein schliessendes Tag?
    http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.4

    Start tag: required, End tag: forbidden

    Wäre dankbar für jeden Tipp.

    Du solltest nicht auf einen aussterbenden Browser setzen. Der IE 7 ist nah und ob der diese Kapriolen mitmacht, darauf würde ich mich nicht verlassen.

    Struppi.

    1. 1. - Um mal alles aus den Weg zu räumen im Bezug auf "woher kommt denn ..." und "was ist denn ..."

      »» Kathegorieauswahl.splice(t.xds,1);

      da t.xds nicht immer 0 ist. Ich möchte ein bestimmtes Element aus dem Array löschen. Dabei wird es dynamisch gesucht. Habe mir extra diese Funktion ausgesucht.

      Ich möchte weder nur das erste "shift()" oder das letzte pop() entfernen.

      Hier nochmal der komplette Code:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      <head>
      <title>LEARNmania von Sebastian Schieß</title>
      <script language="JavaScript">

        
        
      // Headerfunktionen. Dienen dazu, einstellungen zu übernehmen und zu  
      // speichern (cookie)  
        
      var cooc = document.cookie;  
      cooc=cooc.split("-#*#-");  
      function savePoint(pos,wert) {  
       var string = document.cookie;  
       string=string.split("-#*#-");  
       string[pos]=wert;  
       var St="";  
       for(var i=0;i<9;i++)  
       {  
         if(i!=0)  
         {  
           if(string[i])  
           St+="-#*#-"+string[i];  
           else  
           {  
             if(i==1)  
             {  
               St+="-#*#-1"  
             }  
             else  
             {  
               St+="-#*#-0"  
             }  
           }  
         }  
         else  
         {  
           St+=string[i];  
         }  
       }  
       document.cookie="";  
       document.cookie=St;  
       delete St;  
       cooc = document.cookie;  
       cooc=cooc.split("-#*#-");  
      }  
      var cssstyle = "default.css"  
      var defaultOptions = "default.css-#*#-1-#*#-0-#*#-0-#*#-0-#*#-0-#*#-0-#*#-0-#*#-0";  
      if(document.cookie)  
      {  
        var string = document.cookie;  
        string=string.split("-#*#-");  
        cssstyle=(string[0])?""+string[0]:"default.css";  
      }  
      function saveCSSandReload(msg) {  
       var string=document.cookie;  
       string=string.split("-#*#-");  
       string[0]=document.getElementById("Design").value;  
       if(msg==true)  
       alert("Neues Anzeigedesign gespeichert.\nSollten Sie das Programm verlassen, werden die Einstellungen wieder verworfen.")  
       var St="";  
       for(var i=0;i<9;i++)  
       {  
         if(i!=0)  
         {  
           if(string[i])  
           St+="-#*#-"+string[i];  
           else  
           {  
             if(i==1)  
             {  
               St+="-#*#-1"  
             }  
             else  
             {  
               St+="-#*#-0"  
             }  
           }  
         }  
         else  
         {  
           St+=string[i];  
         }  
       }  
       document.cookie="";  
       document.cookie=St;  
       delete St;  
       delete string;  
       window.location.reload();  
      }  
      document.write('<link rel="stylesheet" lang="de" href="styles/st.css" src="styles/st.css"></link>')  
      document.write('<link rel="stylesheet" lang="de" href="styles/'+cssstyle+'" src="styles/'+cssstyle+'"></link>')  
        
      // Ende Headerfunktionen  
        
      
      

      </script>
      <style>

        
      a {color:white;}  
      
      

      </style>
      </head>
      <body>
      <div align=center>
      <script language="JavaScript" src="questionslibarys/all.js"></script>
      <script language="JavaScript">
      <!--

        
      var links = 0  
      var linksmax = 0  
      for(var i in qlist)  
      {  
        links++;  
        linksmax++;  
        document.write("<input type='checkbox' onClick='if(this.checked==true){captit(\""+i+"\",this)} else {recaptit(\""+i+"\",this)}'>"+i+" mit "+qlist[i].length+" Fragen</input><br>")  
      }  
      
      

      -->
      </script>
      </div>
      <script language="JavaScript" src="includes/menuescript.js"></script>
      <script language="JavaScript">
      <!--

        
      var Kathegorieauswahl = new Array();  
      function recaptit(x,t) {  
       Kathegorieauswahl.splice(t.xds,1);  
       t.style.color='#ffffff'  
       links++  
       if(links != linksmax)  
       document.getElementById("ACTION").disabled = false;  
       else  
       document.getElementById("ACTION").disabled = true;  
      }  
      function captit(x,t)  
      {  
        Kathegorieauswahl[Kathegorieauswahl.length] = x  
        links--;  
        if(links != linksmax)  
        document.getElementById("ACTION").disabled = false;  
        else  
        document.getElementById("ACTION").disabled = true;  
        if(links==0)  
        {  
          document.getElementById("ACTION").disabled = true;  
          start()  
        }  
        else  
        {  
          t.xds = Kathegorieauswahl.length-1  
          t.style.color='#333333'  
        }  
      }  
      function start() {  
          var top = (screen.height/2) - 200  
          var left= (screen.width/2) - 300  
          var f = window.open("Logs/index.html?"+Kathegorieauswahl+"","Quiz","width=600,height=400,top="+top+",left="+left+"")  
          window.blur()  
          window.history.go(-1)  
          f.focus();  
      }  
      var aobj=document.getElementsByTagName("A")  
      for(var i in aobj)  
      {  
        aobj[i].onfocus=new Function("this.blur()")  
      }  
      
      

      -->
      </script>
      <br><br>
      <input value="Quiz starten" style="border:2px outset;text-align:center;" disabled id="ACTION" onClick="start()"></input>
      </body>
      </html>

      Und um die Frage von all.js abzufangen - Hier die datei all.js (zu groß, um alles Anzuzeigen ...):

        
      var qlist=new Array(),aktuelleKat,a_Frage= 0;  
      function Kathegorie(x) {qlist[x]=new Array();aktuelleKat=x}  
      function Frage(x) {a_Frage= qlist[aktuelleKat].length;qlist[aktuelleKat][a_Frage]=new Array();qlist[aktuelleKat][a_Frage][0]=x}  
      function Antwort(x) {qlist[aktuelleKat][a_Frage][qlist[aktuelleKat][a_Frage].length]=x}  
        
      //  
      //  --------------------   Anleitung   --------------------  
      //  
      //  
      // um neue Fragen einzufügen, müssen entweder die Fragen in die Blöcke eingefügt werden:  
      //  
      // Kathegorie("Fragen über Programme")  
      //    Frage("Was ist das?")  
      //       Antwort("Ein Computer.")  
      //       Antwort("Eine Tastatur.")  
      //       Antwort("Eine Maus.")  
      //       Antwort("Ein Drucker.")  
      //  
      // oder es muss eine neue Kathegorie angelegt werden:  
      //  
      // Kathegorie("Neue Kathegorie")  
      //  
      // Die erste mögliche Antwort ist die korrekte Antwort:  
      //  
      //    Frage("Richtig oder Falsch?")  
      //       Antwort("Richtig")  
      //       Antwort("Falsch")  
      //       Antwort("Falsch")  
      //  
        
      Kathegorie("Fachkunde 1")  
         Frage("In welches Schreiben passt die Formulierung 'Wir haben Bedarf an ...'?")  
            Antwort("Anfrage")  
            Antwort("Angebot")  
            Antwort("Bestellung")  
            Antwort("Rechnung")  
            Antwort("Bestellungsannahme")  
         Frage("Einem Arbeitnehmer wird das Arbeitslosengeld für einige Zeit gesperrt. Vor welchem Gericht kann er gegen die Entscheidung klagen?")  
            Antwort("Landgericht")  
            Antwort("Verwaltungsgericht")  
            Antwort("Sozialgericht")  
            Antwort("Familiengericht")  
            Antwort("Vormundschaftsgericht")  
         Frage("Auf der Verpackung von Schreibmaschinenpapier steht '120 g'. Das bedeutet ...")  
            Antwort(", dass 1 Bogen A0 120 gramm wiegen.")  
            Antwort(", dass die Verpackung 120 gramm wiegt.")  
            Antwort(", dass 10 Blätter 120 gramm wiegen.")  
            Antwort(", dass 100 Blätter 120 gramm wiegen.")  
            Antwort(", dass 1 Bogen A1 120 gramm wiegen.")  
         Frage("Wie hoch ist die Haftung der Deutschen Post AG bei Verlust eines Päckchens?")  
            Antwort("Keine Haftung")  
            Antwort("Pauschal 40,00 EUR")  
            Antwort("In der Höhe des nachgewiesenen Schadens")  
            Antwort("Für einen nachgewiesenen Schaden bis 500,00 EUR")  
            Antwort("Die Post haftet nur bei Beschädigung")  
      Kathegorie("Fachkunde 2")  
         Frage("Wer zahlt bei Arbeitslosigkeit das Arbeitslosengeld aus?")  
            Antwort("Arbeitsamt")  
            Antwort("Sozialamt")  
            Antwort("Landesversicherungsanstalten")  
            Antwort("Finanzamt")  
            Antwort("Krankenkassen")  
         Frage("Welche Einrichtung hat den gesetzlichen Auftrag, Vorschriften zur Unfallverhütung zu erstellen?")  
            Antwort("Berufsgenossenschaft")  
            Antwort("Gewerbeaufsichtsamt")  
            Antwort("Landesregierung")  
            Antwort("Bundesaufsichtsamt für Versicherungswesen in Berlin")  
            Antwort("Technischer Überwachungsverein (TÜV)")  
      
      

      Das ist erstmal das wichtigste ...

      Aber Danke für die IFELSE-Tipps.

      PS: Sch..... auf die Validität zu IE. Das funktioniert auf diesem Netzwerk, wo es verwendet werden soll, problemlos. Ie interpretiert das schon genau so, wie ich es will. Also wegen HTML-Tags bitte nicht "meckern"

      MFG
      Griever

      1. Hier nochmal der komplette Code:

        Der nach wie vor sehr undurchsichtig ist.

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <title>LEARNmania von Sebastian Schieß</title>
        <script language="JavaScript">

        language veraltet und überflüssig.

        if(i!=0)

        wie gesagt sowas kannst du kürzer schreiben.

        delete St;

        Wozu?

        var links = 0
        var linksmax = 0
        for(var i in qlist)
        {
          links++;
          linksmax++;
          document.write("<input type='checkbox' onClick='if(this.checked==true){captit(""+i+"",this)} else {recaptit(""+i+"",this)}'>"+i+" mit "+qlist[i].length+" Fragen</input><br>")
        }

          
        Das ist mir nicht klar, ist qlist ein Array (wie du es anderswo deklarierst) oder ein Object?  
        Warum zählst du hier die zwei Variabeln mit?  
          
        
        > -->  
          
        Die HTML Kommentare sind in allen IE versionen überflüssig (es kann sein das es mal einen IE 2 <http://browsers.evolt.org/?ie/16bit> gab, der das script Element nicht kannte, ich kann mir aber nicht vorstellen das der irgendwo noch zum Einsatz kommt)  
          
        
        > var Kathegorieauswahl = new Array();  
        > function recaptit(x,t) {  
        >  Kathegorieauswahl.splice(t.xds,1);  
        >  t.style.color='#ffffff'  
        >  links++  
        >  if(links != linksmax)  
        >  document.getElementById("ACTION").disabled = false;  
        >  else  
        >  document.getElementById("ACTION").disabled = true;  
        > }  
          
        Nach wie vor, wozu das x?  
          
          
        
        > var aobj=document.getElementsByTagName("A")  
        > for(var i in aobj)  
        > {  
        >   aobj[i].onfocus=new Function("this.blur()")  
        > }  
          
        Wozu das?  
          
        
        > PS: Sch..... auf die Validität zu IE. Das funktioniert auf diesem Netzwerk, wo es verwendet werden soll, problemlos. Ie interpretiert das schon genau so, wie ich es will. Also wegen HTML-Tags bitte nicht "meckern"  
          
        Ich mecker nicht, du hast gefragt wie du den Code kürzer schreiben kannnst, wenn dir aber soviel daran liegt ungültigen längeren Code zu schreiben, ist es dein Problem.  
          
        Aber wie gesagt, der IE 7 steht bereit und ob der alle Fehler noch genauso ausbügelt weiß ich nicht.  
          
        Struppi.
        
        -- 
        [Javascript ist toll](http://javascript.jstruebig.de/)
        
  3. echo $begrüßung;

    Hi. Ich habe ja dieses Quizprogramm im Aufbau. Nun hab ich da eine Frage insbezüglich der Quelltextgröße. (möchte es gerne auf eine Diskette speichern können, ohne groß Platz zu verbrauchen. Da zählt jedes Zeichen ...)

    Da musst du schon in Größenordnungen Bytes sparen. Eine Datei belegt Blöcke zu, sagen wir mal 512 Bytes - genau weiß ich das nicht (mehr), kannst du sicher irgendwo nachlesen. Ob die Datei 513 oder 1023 Bytes groß ist, sie belegt immer zwei Blöcke auf dem Datenträger.
    Wenn du nicht andere Medien nehmen kannst, versuchen die Dateien zu komprimieren (ZIP).

    echo "$verabschiedung $name";