aetzchen: Was mach ich falsch?

Ich komm nicht weiter was wohl an meiner unwissenheit in js liegt ;-) bzw. ich finde meinen Fehler nicht.
Auch meine suche bei google bzw in selfhtml brachte mich nicht weiter.

So das ist mein js

function checkmax(bname, sname){
 if (document.forms['order'].elements[sname].options[1].selected == true){
         if( document.getElementById(bname + "0").checked == true && document.getElementById(bname + "1").checked == true)  {document.getElementById(bname + "2").disabled = true;}
         else  {document.getElementById(bname + "2").disabled = false;}
         if( document.getElementById(bname + "0").checked == true && document.getElementById(bname + "2").checked == true)  {document.getElementById(bname + "1").disabled = true;}
         else  {document.getElementById(bname + "1").disabled = false;}
         if( document.getElementById(bname + "1").checked == true && document.getElementById(bname + "2").checked == true)  {document.getElementById(bname + "0").disabled = true;}
         else  {document.getElementById(bname + "0").disabled = false;}
  }
 if (document.forms['order'].elements[sname].options[2].selected == true){
         if( document.getElementById(bname + "0").checked == true)
         {document.getElementById(bname + "1").disabled = true
          document.getElementById(bname + "2").disabled = true;}
         if( document.getElementById(bname + "1").checked == true)
         {document.getElementById(bname + "0").disabled = true
          document.getElementById(bname + "2").disabled = true;}
         if( document.getElementById(bname + "2").checked == true)
         {document.getElementById(bname + "0").disabled = true
          document.getElementById(bname + "1").disabled = true;}
         if ( document.getElementById(bname + "0").checked == false && document.getElementById(bname + "1").checked == false && document.getElementById(bname + "2").checked == false)
         {   var boxes = new Array();
       for (var i=0; i<3; i++) {
       boxes[i] = document.getElementById(bname + i);
    boxes[i].disabled = false;
         }
  }
 }
}
function deselect(bname, sname){
   var boxes = new Array();
   for (var i = 0; i < 3; i++) {
   boxes[i] = document.getElementById(bname + i);
   if (document.forms['order'].elements[sname].options[0].selected == true) {
 boxes[i].checked = true
 boxes[i].disabled = true;
   }
   else {
    boxes[i].checked = false
    boxes[i].disabled = false;
    }
  }
}

und das ist mein aufruf später in form

<tr><td>Kongressticket:</td><td colspan="3" >
     <select name="kticket'.$i.'" onChange="deselect('.$checkt.','.$formt.')">
       <option value="3dtp'.$i.'" selected>3. Tagesticket</option>
        <option value="2dtp'.$i.'">2. Tagesticket</option>
       <option value="1dtp'.$i.'">1. Tagesticket</option>
      </select>
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<input class="checkbox" name="dsp1'.$i.'" type="checkbox" id="box'.$i.'0" onclick="checkmax('.$checkt.','.$formt.')" value="day1" checked disabled>&nbsp;09.09.2008&nbsp;&nbsp;

<input class="checkbox" name="dsp2'.$i.'" type="checkbox" id="box'.$i.'1" onclick="checkmax('.$checkt.','.$formt.')" value="day2" checked disabled>&nbsp;10.09.2008&nbsp;&nbsp;

<input class="checkbox" name="dsp3'.$i.'" type="checkbox" id="box'.$i.'2" onclick="checkmax('.$checkt.','.$formt.')" value="day3" checked disabled>&nbsp;11.09.2008&nbsp;&nbsp;</td></tr>

Ich hatte das probl zwar schon anders gelöst und das js lief. Leider finde ich es extrem unschön das js in ne for schleife von php zu hängen da es mein script aufbläst und so will ich die variablen an die funktionen von js übergeben. Nur leider kommen die da nicht an bzw. das script läuft nicht wenn ich in die funktionen den string eintrage aus php variablen.

z.b.

$checkt="box".$i;
  $formt ="kticket".$i;

was dann

<select name="kticket'.$i.'" onChange="deselect(box1,kticket1)">

währe.

Kann mir jemand helfen bzw meine dummheit ausgleichen ;-). Danke.

  1. Ich komm nicht weiter was wohl an meiner unwissenheit in js liegt ;-) bzw. ich finde meinen Fehler nicht.

    welchen Fehler?

    Struppi.

  2. Mahlzeit,

    Kann mir jemand helfen bzw meine dummheit ausgleichen ;-). Danke.

    1. Bleibe in Deinem Thread zu diesem Thema - Doppelpostings sind hier nicht gern gesehen und unerwünscht (warum das so ist, steht in der Charta, die Du zwar akzeptiert hast, aber offenbar ignorierst).

    2. Liefere eine vernünftige Fehlerbeschreibung und schreib vor allem mal, was Du eigentlich erreichen willst ... Du kopierst einen Haufen unübersichtlichen Code und schreibst (mehr oder weniger) "funzt net" - erwähnst aber mit keinem Wort, was Du erreichen willst, was wie funktionieren soll o.ä. Erwartest Du von Deinen Lesern hellseherische Fähigkeiten?

    3. Hast Du die Dir in Deinem o.g. Thread gegebenen Hinweise und Tipps umgesetzt? Was genau funktioniert daran nicht?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo,

      also ich hab ein drop down mit 3 feldern.

      -3.Tagesticket
      -2.Tagesticket
      -1.Tagesticket

      dazu habe ich  3 checkboxen.

      [] 1Tag
      [] 2Tag
      [] 3Tag

      ich will das bei z.b  bei 3 Tageticket alle boxen disabled und checked sind.
      das bei 2 tagesticket nur 2 anwählbar sind und die 3 disabled wird
      bei 1 tagesticket nur 1 etc.
      das will ich ohne reload sonst hätte ich das in php machen können. deswegen beschäftige ich mich gerade mit js obwohl es überhaupt nicht mein thema ist.

      Ich habe eine funktionierende Lösung welche aber das js in eine php for schleife hängt. Das heißt bei z.b. 4 Personen die ein Ticket bestellen. Würde das js 4mal in den quelltext geschrieben. Was für mich eine unmögliche Lösung ist da ich ja an funktionen argumente übergeben kann.

      Zum bsp. der begin meiner alten lösung.

      <? for ($i=1; $i <= $_SESSION['personenanzahl']; $i++){?>
      <SCRIPT>
      function checkmax<?=$i?>(){
       if (document.order.kticket<?=$i?>.options[1].selected == true){
               if( document.getElementById("box<?=$i?>0").checked == true && document.getElementById("box<?=$i?>1").checked == true)  {document.getElementById("box<?=$i?>2").disabled = true;}
               else  {document.getElementById("box<?=$i?>2").disabled = false;}

      das würde 4 mal js bedeuten. Nun versuche ich das js anzupassen das es nur noch einmal geschrieben wird. Das sieht mom wie folgt aus.

      function checkmax(bname, sname){
       if (document.forms['order'].elements[sname].options[1].selected == true){
               if( document.getElementById(bname + "0").checked == true && document.getElementById(bname + "1").checked == true)  {document.getElementById(bname + "2").disabled = true;}

      bei folgenden funktionsaufruf

      <select name="kticket'.$i.'" onChange="deselect('.$checkt.','.$formt.')">

      das problem ist, es funktioniert gar nichts mehr. Selbst wenn ich als erstes in die funktion ein

      alert("hau mich blau haue") haue. Kommt nicht raus. Ich bin aufgrund meiner js kenntnisse leider nicht in der Lage meinen Fehler zu finden. Ich gehe mal davon aus das ich die argumente nicht richtig übergebe.

      Danke

      1. Hi,

        also ich hab ein drop down mit 3 feldern.

        -3.Tagesticket
        -2.Tagesticket
        -1.Tagesticket

        dazu habe ich  3 checkboxen.

        [] 1Tag
        [] 2Tag
        [] 3Tag

        ich will das bei z.b  bei 3 Tageticket alle boxen disabled und checked sind.
        das bei 2 tagesticket nur 2 anwählbar sind und die 3 disabled wird
        bei 1 tagesticket nur 1 etc.

        Leuchtet mir auf Anhieb nicht ein, wozu solch ein Konstrukt brauchbar sein koennte.
        Was soll das werden?

        das problem ist, es funktioniert gar nichts mehr. Selbst wenn ich als erstes in die funktion ein
        alert("hau mich blau haue") haue. Kommt nicht raus.

        Dann schau als allererstes in der JS-Fehlerkonsole eines guten Browsers, wie bspw. Firefox, nach.

        MfG ChrisB

        1. Hallo Chris,

          leider habe ich hier leidvolle Erfahrungen mit Pädagogen an der Uni. Das Konstrukt soll dazu dienen Fehleingaben abzufangen.

          Das heißt wenn jemand ein 3 Tagesticket bestellt dann sollen die alle 3 Tage der Veranstaltung selektiert und nicht mehr anwählbar sein. Wenn er sich jetzt entschließt ein 2 Tagesticket zu nehmen muss er sich für 2 von 3 Tagen entscheiden. Leider hat die Erfahrung hier gezeigt das die Leute auch bei 2 Tagestickets alle 3 Tage auswählen. Um das abzufangen wird nach 2 hacken in den checkboxen die 3te gesperrt und umgekehrt. Sozusagen DAU sicher.

          Die Erfahrung hier Zeig das nicht der schuld ist, der nicht in der Lage ist Logisch zu denken, und Fehleingaben macht sondern das System das nicht in der Lage ist diese Dummheiten abzufangen.
          Dies erfordert halt manchmal extremen Aufwand bzw. den meisten Hirnschmalz dabei zu überlegen welche Dummheiten könnten den User denn hier einfallen.

          Danke für den Tip mit der Konsole

          Grüße

      2. Mahlzeit,

        also ich hab ein drop down mit 3 feldern.

        -3.Tagesticket
        -2.Tagesticket
        -1.Tagesticket

        dazu habe ich  3 checkboxen.

        [] 1Tag
        [] 2Tag
        [] 3Tag

        ich will das bei z.b  bei 3 Tageticket alle boxen disabled und checked sind.
        das bei 2 tagesticket nur 2 anwählbar sind und die 3 disabled wird
        bei 1 tagesticket nur 1 etc.
        das will ich ohne reload sonst hätte ich das in php machen können. deswegen beschäftige ich mich gerade mit js obwohl es überhaupt nicht mein thema ist.

        Da würde mir spontan folgender Code einfallen:

        <script type="text/javascript">  
          
        [code lang=javascript]function checkmax(sel) {  
          var frm = sel.form;  
          var i   = sel.name.substr(sel.name.indexOf('_') + 1);  
          var val = sel.value;  
          
          switch (val) {  
            case 1:  
              frm.elements['box1_' + i].disabled = false;  
              frm.elements['box2_' + i].disabled = true;  
              frm.elements['box3_' + i].disabled = true;  
          
            case 2:  
              frm.elements['box1_' + i].disabled = false;  
              frm.elements['box2_' + i].disabled = false;  
              frm.elements['box3_' + i].disabled = true;  
          
            case 3:  
              frm.elements['box1_' + i].checked = true;  
              frm.elements['box1_' + i].disabled = true;  
              frm.elements['box2_' + i].checked = true;  
              frm.elements['box2_' + i].disabled = true;  
              frm.elements['box3_' + i].checked = true;  
              frm.elements['box3_' + i].disabled = true;  
          }  
        }  
        
        

        </script>
        [...]
        <select name="kticket_<?=$i?>" onchange="checkmax(this);">
        <option value="1">-1.Tagesticket</option>
        <option value="2">-2.Tagesticket</option>
        <option value="3">-3.Tagesticket</option>
        </select>
        <input type="checkbox" name="box1_<?=$i?>">
        <input type="checkbox" name="box2_<?=$i?>">
        <input type="checkbox" name="box3_<?=$i?>">[/code]

        Schön ist er zwar nicht, aber sollte eigentlich funktionieren. Den HTML-Teil kannst Du dann innerhalb einer PHP-Schleife beliebig oft in das Dokument schreiben.

        das problem ist, es funktioniert gar nichts mehr. Selbst wenn ich als erstes in die funktion ein

        Nochmal: "es funktioniert (gar nichts mehr)" ist keine hilfreiche Problembeschreibung. Was steht in der Javascript-Fehlerkonsole des Browsers? Irgendwo MUSS eine aussagekräftige Fehlermeldung stehen (gesetzt den Fall, dass Du einen vernünftigen Browser benutzt - und damit meine ich NICHT den IE!).

        alert("hau mich blau haue") haue. Kommt nicht raus. Ich bin aufgrund meiner js kenntnisse leider nicht in der Lage meinen Fehler zu finden. Ich gehe mal davon aus das ich die argumente nicht richtig übergebe.

        Ohne Fehlermeldung kann Dir leider NIEMAND weiterhelfen.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. Hallo,

    <select name="kticket'.$i.'" onChange="deselect(box1,kticket1)">

    Wenn das so im Browser ankommt, funktioniert es natürlich nicht. Das name-Attribut soll vermutlich etwas wie "kticket1", "kticket2" usw. enthalten. "kticket'.$i.'" wird aber nicht zu etwas wie "kticket1" zusammengesetzt, weil im name-Attribut stehender Programmcode nicht ausgeführt wird. name kann nur Strings enthalten (CDATA).

    Gruß, Don P

    1. Hallo Don P,

      tut mir leid kannst du mir ein wenig auf die sprünge helfen. Begreifs nicht ;-).

      "kticket'.$i.'" ist php und wird auf den server ausgeführt und der browser bekommt dann "kticket1".

      zur vervollständigung

      echo '<select name="kticket'.$i.'" onChange="deselect('.$checkt.','.$formt.')">';

      der html text lautet dann

      <select name="kticket1" onChange="deselect(box1,kticket1)">

      die Fehler-Konsole des Firefox gibt aus

      box1 is not defined

      Danke für hilfe. Vielleicht hab ich mich auch dumm ausgedrückt. Bin nicht so oft in Foren unterwegs.

      MfG

      1. "kticket'.$i.'" ist php und wird auf den server ausgeführt und der browser bekommt dann "kticket1".

        Dein Problem tritt auf dem Server oder im Browser auf?
        Warum zeigst du uns den Server Code?

        der html text lautet dann

        <select name="kticket1" onChange="deselect(box1,kticket1)">

        Das ist das einzige was interessiert bei einer JS Frage.

        die Fehler-Konsole des Firefox gibt aus

        box1 is not defined

        Das ist doch eine klare Aussage.
        Wurde die Variabel box1 in deinem Code deklariert?

        Struppi.

        1. Das ist ja der Punkt,

          ich habe keine variable Box1.

          Ich hab

          function checkmax(bname, sname)

          also die

          variablen
                   - bname
                   - sname

          der inhalt von bname also der string ist box1.

          1. Hi,

            Das ist ja der Punkt,
            ich habe keine variable Box1.

            Abgesehen davon dass JavaScript Bezeichner case-senstive behandelt -

            Ich hab
            function checkmax(bname, sname)
            also die
            variablen
                     - bname
                     - sname
            der inhalt von bname also der string ist box1.

            Du hast gerade vorher noch geschrieben,

            der html text lautet dann
            <select name="kticket1" onChange="deselect(box1,kticket1)">

            Geht's jetzt bitte mal etwas weniger konfus?

            Im onclick steht JavaScript-Code, als ist box1 dort der Name einer JavaScript-Variablen.
            Wenn du keine solche namens box1 hast, wieso schreibst du dann box1 dort hin?

            Oder meinst du vielleicht gar keine Variable, sondern das Textliteral 'box1'? Dann notiere es auch als solches.

            MfG ChrisB

            1. Oder meinst du vielleicht gar keine Variable, sondern das Textliteral 'box1'? Dann notiere es auch als solches.

              Genau das wars danke!

              Der fehler lag darin (es ist php):

              $checkt='box'.$i; (so sah es aus)
              $checkt="'box".$i."'"; (so muss es aussehen)

              habe also keinen text sondern ne var übergeben(was ich bis eben nicht wußte)
              Danke Chris

              Danke EKKi,
              für die andere Lösung (kann ich noch was lernen).

              So damit ist meine ausflug nach js beendet dank nochmal.

      2. Hallo,

        <select name="kticket1" onChange="deselect(box1,kticket1)">

        Gut.

        die Fehler-Konsole des Firefox gibt aus

        box1 is not defined

        Die Fehler-Konsole lügt im allgemeinen nicht. Mit deselect(box1,kticket1) übergibst du 2 du der Funktion deselect zwei Variablen, box1 und kticket1. Vermutlich sind beide nicht definiert. Wenn eine select-Box im name-Attribut "kticket1" hat, gibt es deswegen noch keine JavaScript-Variable mit diesem Namen. Dasselbe gilt für name="box1" im input-Feld.

        Vielleicht willst du lieber Strings übergeben: onChange="deselect('box1', 'kticket1')"

        Wie auch immer. Von PHP verstehe ich nichts. Ist hier auch irrelevant. Wie  andere schon angemerkt haben: Zeige bitte nur das, was im Browser ankommt. Wenn dort etwas falsches ankommt, lässt sich das viel leichter finden und falls du dann nicht weißt, wie du es in PHP anstellen sollst, dass es richtig kommt, dann frage in der Rubrik PHP danach. Erst mal musst du aber rausfinden, was richtig wäre, insofern bist du hier schon richtig.

        Gruß, Don P

  4. Hallo aetzchen,

    ... ich finde meinen Fehler nicht.
    Auch meine suche bei google bzw in selfhtml brachte mich nicht weiter.

    Google kann ja schon ziemlich viel, aber Fehler finden?

    Gruß, Jürgen

    1. Hi,

      Google kann ja schon ziemlich viel, aber Fehler finden?

      Auch das kann es - allerdings halte ich "Fehler" als Suchbegriff in diesem Falle fuer nicht sonderlich zielfuehrend ...

      SCNR ChrisB