problem mit eval()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • problem mit eval()

    Hallo zusammen,

    ersteinmal der Code der Funktion um die es sich handelt:

    function update(f){
    anzahl=""; preis=""; beschreibung=""; farbe=""; groesse=""
    for (var i=1; i<=f.posten.value; i++){

    a = eval("f.anzahl"+i+".value")
    p = eval("f.preis"+i+".value")
    b = eval("f.beschreibung"+i+".value")
    f = eval("f.farbe"+i+".value")
    g = eval("f.groesse"+i+".value")

    einfuegen(a, p, b, f, g)
    }
    parent.inhalt.location.href = parent.inhalt.location.href
    }

    (for schleife wird im Test nur einmal durchlaufen)

    es handelt sich um ein Frameset mit 2 Frames:
    1. Frame ->inhalt
    2. Frame ->korb

    ich rufe die o.g. Funktion im Inhalt Frame folgendermaßen auf:

    <INPUT TYPE="BUTTON" onclick="top.korb.update(this.form)" VALUE="Aktualisieren">

    So funktioniert das aber nicht:
    ERROR: f.groesse1 has no properties

    Ändere ich aber g=... in der Funktion in:

    g = f.groesse+i.value

    Heißt es:
    ERROR: f.posten has no properties

    Jetzt kommst!
    Nach einer weiteren Änderung:

    function update(f){

    puh=f.posten.value

    anzahl=""; preis=""; beschreibung=""; farbe=""; groesse=""
    for (var i=1; i<=puh; i++){
    ...

    Funktioniert alles bis auf, dass g zu NaN wird?

    ändere ich nun update(f) wieder so das

    g=eval("f.groesse"+i+".value")

    kommt der selbe Fehler wie am Anfang:

    ERROR: f.groesse1 has no properties

    Falls jemand die Muse hatte sich das durchzulesen und eine Idee hat, woran ich scheitere, bedanke ich mich im Vorraus für die Mühe

    Tobsn


    Zuletzt geändert von Tobsn; 04.08.2004, 14:38.

  • #2
    mach das ganz schnell weg sonst gibbet hier mecker....

    onClick="javascript:

    onclick="anweisung" iss richtig

    Byteandi
    Sport Dates

    Kommentar


    • #3
      Re: problem mit eval()

      eval is evil, oft genug gesagt.

      wofür willst du überhaupt eval verwenden - warum greifst du nicht gleich ordentlich auf die formularfelder zu?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Ups

        Danke für den Hinweis, peinlich peinlich

        Problem besteht immer noch

        Kommentar


        • #5
          Re: Ups

          Original geschrieben von Tobsn
          Danke für den Hinweis, peinlich peinlich
          das bezog sich sicherlich auf das 'javascript'

          Original geschrieben von Tobsn
          Problem besteht immer noch
          aber hierzu solltest du mal wahsaga's post lesen/beachten.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            @wahsaga

            Ok.

            eval() =evil wusst ich net, sorry

            Nach den Änderungen ist nun nur noch zu klären, warum jetzt in allen Variablen NaN steht?
            Hat das was mit der for Schleife zu tun?

            Ein

            alert(f.anzahl1.value+","+f.preis1.value+","+f.beschreibung1.value+","+f.farbe1.value+","+f.groesse1 .value)

            vor der for-Schleife gibt mir die Korrekten Werte aus.

            Nachtrag:

            function einfuegen(a, p, b, f, g){
            var anz = (istZahl(a) ? a : "0")
            anzahl += anz + "|"
            preis += p + "|"
            beschreibung += b + "|"
            farbe += f + "|"
            groesse += g + "|"
            }

            Kommentar


            • #7
              mich deucht, du sprichst das form nicht richtig an.
              lass dir mal mit alert() => f ausgeben ...

              wenn du nicht im selben fenster bist, solltest du mit
              "frameName.document.f.elementname"
              drauf zugreifen können.
              Kissolino.com

              Kommentar


              • #8
                @Wurzel

                mit alert(f)

                Bekomme ich [object HTMLFormElement]

                egal ob ich this.form oder top.inhalt.anzeige benutze.

                (anzeige ist hier der name der Form)

                Was ja mal grundsätzlich nicht falsch ist ;-)

                Wie gesagt, die werte werden mir vor der for-Schleife richtig angezeigt.

                Nur werden die Variablen in der for-Schleife nicht beschrieben ->NaN

                Kommentar


                • #9
                  Re: @wahsaga

                  - was macht die funktion istZahl()? (ok, name ist schon recht sprechend, aber der code wäre interessant)

                  - ist dir klar, dass du keine zahlen an einfuegen() übergibst, sondern strings?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    @wahsaga

                    function istZahl(n){
                    s = ""+n
                    var ziffern = "0123456789"
                    for (var i=0; i<s.length; i++)
                    if (ziffern.indexOf(s.charAt(i))<0) return false
                    return true
                    }

                    das mit den Strings an einfuegen() ist klar

                    Ich versuchs mal mit a=parseInt(a) usw.

                    Aber meiner Meinung nach kommt das ganze gar nicht so weit.

                    Wie kann es Sein , dass

                    VOR der for-Schleife in der Funktion update(f)
                    alert(f. groesse1.value,...)
                    den korrekten Werte ausgibt, aber IN der for-Schleife der Funktion update(f)
                    f.groesse+i.value, und die anderen Werte nicht vefügbar sind???
                    (in diesem Fall i=1 da nur ein Element)
                    Zuletzt geändert von Tobsn; 04.08.2004, 17:10.

                    Kommentar


                    • #11
                      sagt mal, du willst Hilfe von uns, aber du postest ja nicht den Realcode, denn deinem geposteten Code fehlen 'ne Menge ; und ausserdem auch nicht zusammen hängend, dass es schwierig ist, überhaupt zu prüfen, da man hin und her beim Lesen springen muss.

                      Kommentar


                      • #12
                        was passiert bei:
                        Code:
                        f.elements[groesse+i].value
                        @asp
                        glaskugel polieren und abstrahieren
                        Kissolino.com

                        Kommentar


                        • #13
                          @asp2php

                          Tschuldigung für die Code Fragemente.
                          Hier die einzelen Codeauszüge:

                          index.html:

                          Besteht aus einem Frameset mit zwei Frames:
                          rows="*,1"
                          1. frame name="inhalt"
                          2. frame name="korb"

                          korb.html:
                          Code:
                          <HTML>
                          <HEAD><TITLE>Warenkorb</TITLE>
                          <SCRIPT LANGUAGE="JavaScript"><!--
                          var anzahl = ""
                          var preis = ""
                          var beschreibung = ""
                          var farbe = ""
                          var groesse = ""
                          function update(f){
                          //Warenkorb zurücksetzen
                          puh=f.posten.value
                          anzahl=""; preis=""; beschreibung=""; farbe=""; groesse=""
                          for (var i=1; i<=puh; i++){
                          a =  parseInt(f.anzahl+i.value)
                          p =  f.preis+i.value
                          b =  f.beschreibung+i.value 
                          f =  f.farbe+i.value 
                          g =  f.groesse+i.value
                          einfuegen(a, p, b, f, g)
                            }
                            parent.inhalt.location.href = parent.inhalt.location.href
                          }
                          
                          function naechste_anzahl(){
                          if (anzahl.indexOf("|")==-1) return ""
                          var anz = anzahl.substring(0, anzahl.indexOf("|"))
                          anzahl = anzahl.substring(anzahl.indexOf("|")+1)
                          return anz
                          }
                          function naechster_preis(){
                            if (preis.indexOf("|")==-1) return ""
                            var pr = preis.substring(0, preis.indexOf("|"))
                            preis = preis.substring(preis.indexOf("|")+1)
                            return pr
                          }
                          function naechste_beschreibung(){
                            if (beschreibung.indexOf("|")==-1) return ""
                            var bes = beschreibung.substring(0, beschreibung.indexOf("|"))
                            beschreibung = beschreibung.substring(beschreibung.indexOf("|")+1)
                            return bes
                          }
                          function naechste_farbe(){
                            if (farbe.indexOf("|")==-1) return ""
                            var far = farbe.substring(0, farbe.indexOf("|"))
                            farbe = farbe.substring(farbe.indexOf("|")+1)
                            return far
                          }
                          function naechste_groesse(){
                            if (groesse.indexOf("|")==-1) return ""
                            var groe = groesse.substring(0, groesse.indexOf("|"))
                            groesse = groesse.substring(groesse.indexOf("|")+1)
                            return groe
                          }
                          function istZahl(n){
                            s = ""+n
                            var ziffern = "0123456789"
                            for (var i=0; i<s.length; i++)
                              if (ziffern.indexOf(s.charAt(i))<0) return false
                            return true
                          }
                          function einfuegen(a, p, b, f, g){
                            var anz = (istZahl(a) ? a : "0")
                            anzahl += anz + "|"
                            preis += p + "|"
                            beschreibung += b + "|"
                            farbe += f + "|"
                            groesse += g + "|"
                          }
                          //--></SCRIPT>
                          </HEAD>
                          <BODY></BODY>
                          </HTML>
                          korb_anzeige.html:
                          Code:
                          <HTML>
                          <HEAD><TITLE>Ausgabe des Warenkorbs</TITLE></HEAD>
                          <BODY>
                          <H3>Inhalt des Warenkorbs</H3>
                          <FORM NAME="anzeige">
                          <script language="JavaScript">
                          <!--
                          function radioWert(rObj) {
                              for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;
                              return false;
                            }
                          var old_anzahl=top.korb.anzahl
                          var old_preis=top.korb.preis
                          var old_beschreibung=top.korb.beschreibung
                          var old_farbe=top.korb.farbe
                          var old_groesse=top.korb.groesse
                          
                          function tag(s){ document.write("<"+s+">") }
                          
                          function kaufm(x) {
                            var k = (Math.round(x * 100) / 100).toString();
                            k += (k.indexOf('.') == -1)? '.00' : '00';
                            var p = k.indexOf('.'), m = k.indexOf('-.');
                            var f = (p == 0 || m == 0)? '0,' : ',';
                            return k.substring(0, p) + f + k.substring(p+1, p+3);
                          }
                          tag("TABLE BORDER=1");
                          tag("TR");
                          tag("TD"); document.write("Anzahl"); tag("/TD")
                          tag("TD"); document.write("Beschreibung"); tag("/TD")
                          tag("TD"); document.write("Farbe"); tag("/TD")
                          tag("TD"); document.write("Gr&ouml;sse"); tag("/TD")
                          tag("TD"); document.write("Einzelpreis"); tag("/TD")
                          tag("TD"); document.write("Gesamtpreis"); tag("/TD")
                          tag("/TR")
                          posten = 0
                          gesamtPreis=0;
                          anzahl="0"
                          while (anzahl!=""){
                          var anzahl = top.korb.naechste_anzahl()
                          var preis = top.korb.naechster_preis()
                          var beschreibung = top.korb.naechste_beschreibung()
                          var farbe = top.korb.naechste_farbe()
                          var groesse = top.korb.naechste_groesse()
                          var gesamtPreis=gesamtPreis+(preis*anzahl)*1
                          var gesamtStueck=gesamtStueck+(anzahl*1)*1
                          
                          if (anzahl!=""){
                          posten++
                          tag("TR")
                          tag("TD"); 
                          tag("INPUT TYPE='TEXT' NAME='anzahl" + posten + "' SIZE=2 VALUE='" + anzahl + "'")
                          
                          tag("INPUT TYPE='HIDDEN' NAME='preis" + posten+"' VALUE='" + preis + "'")
                          tag("INPUT TYPE='HIDDEN' NAME='beschreibung" + posten + "' VALUE='" + beschreibung + "'")
                           tag("INPUT TYPE='HIDDEN' NAME='farbe" + posten + "' VALUE='" + farbe + "'")
                          tag("INPUT TYPE='HIDDEN' NAME='groesse" + posten + "' VALUE='"+ groesse +"'")
                          
                          tag("INPUT TYPE='HIDDEN' NAME='GesPreis" + posten + "' VALUE='" + anzahl*preis + "'")
                          tag("/TD")
                          tag("TD"); document.write(beschreibung); tag("/TD")
                          tag("TD"); document.write(farbe); tag("/TD")
                          tag("TD"); document.write(groesse); tag("/TD")
                          tag("TD"); document.write(kaufm(preis)); tag("/TD")
                          tag("TD align=right"); document.write(kaufm(anzahl*preis)); tag("/TD")
                          tag("/TR")
                            }
                          }
                          exaktMwSt=(gesamtPreis/100)*16
                          MwSt=kaufm((gesamtPreis/100)*16)
                          tag("TR");
                          tag("TD colspan='4'"); document.write("&nbsp;"); tag("/TD")
                          tag("TD align=right"); document.write("MwSt. 16% &euro;"); tag("/TD")
                          tag("TD align=right"); document.write(MwSt); tag("/TD")
                          tag("/TR")
                          
                          tag("TR");
                          tag("TD colspan='6' height='5'"); document.write("&nbsp;"); tag("/TD")
                          tag("/TR")
                          
                          tag("TR");
                          tag("TD"); document.write("&nbsp;"); tag("/TD")
                          tag("TD"); document.write("Zahlungsart:"); tag("/TD")
                          tag("TD colspan='3'"); tag("input  type='radio' name='Zahlungsart' value='2.00' checked"); document.write(" Vorkasse &nbsp;")
                          tag("input  type='radio' name='Zahlungsart' value='5.00'"); document.write(" Nachname &nbsp;"); tag("/TD")
                          //Zahlungsart=radioWert(document.anzeige.Zahlungsart)
                          //tag("INPUT TYPE='HIDDEN' NAME='Zart' VALUE='" + document.anzeige.Zahlungsart[0].value + "'")
                          tag("TD align=right"); document.write(document.anzeige.Zahlungsart[0].value); tag("/TD")
                          tag("/TR")
                          
                          tag("TR");
                          tag("TD"); document.write("&nbsp;"); tag("/TD")
                          tag("TD"); document.write("Versandkosten"); tag("/TD")
                          tag("TD colspan='3'"); document.write("&nbsp;"); tag("/TD")
                          Post=5,00
                          tag("TD align=right"); document.write(Post); tag("/TD")
                          tag("/TR")
                          
                          tag("TR");
                          tag("TD colspan='4'"); document.write("&nbsp;"); tag("/TD")
                          tag("TD align=right"); document.write("Zu zahlender Betrag &euro;"); tag("/TD")
                          zuZahlen=kaufm(gesamtPreis*1+exaktMwSt*1+document.anzeige.Zahlungsart[0].value*1+Post*1)
                          tag("TD align=right"); document.write(zuZahlen); tag("/TD")
                          tag("/TR")
                          
                          tag("/TABLE")
                          tag("INPUT TYPE='HIDDEN' NAME='posten' VALUE=" + posten)
                          
                          top.korb.anzahl=old_anzahl
                          top.korb.preis=old_preis
                          top.korb.beschreibung=old_beschreibung
                          top.korb.farbe=old_farbe
                          top.korb.groesse=old_groesse
                          //--></SCRIPT>
                          <INPUT TYPE="BUTTON" onclick="top.korb.update(this.form)" VALUE="Aktualisieren">
                          <p><a href="javascript:history.go(-1)" target="inhalt">Zur&uuml;ck zum Artikel</a><br><a href="alternativ.html" target="inhalt">Zur&uuml;ck zur Gesamt&uuml;bersicht</a></p>
                          </FORM>
                          </BODY>
                          </HTML>
                          memoriam.html:
                          Code:
                          <html>
                          <head>
                          <title>Detail - Memoriam</title>
                          <style type="text/css">
                          <!--
                          body { background-image: url(../images/bg_content.gif); no-repeat: background-attachment: fixed  }
                          -->
                          </style>
                          <link href="../StyleSheet.css" type="text/css" rel="stylesheet">
                          <script language="JavaScript">
                          <!--
                          function Meldung() { 
                             if 
                            (document.myForm.Groesse.value==000)
                             alert('Bitte geben Sie eine Groesse an!');
                             else
                          alert (document.myForm.Anzahl.value + ' Shirt\(s\) \'' + document.myForm.Shirt.value  + '\'\nmit der Farbe \'' + document.myForm.Farbe.value + '\'\nund der Groesse \'' + document.myForm.Groesse.value + '\'\nin den Warenkorb gelegt!');
                          top.korb.einfuegen(document.myForm.Anzahl.value, '18.00', 'In Memoriam', document.myForm.Farbe.value, document.myForm.Groesse.value);
                                }
                          //-->
                          </script>
                          </head>
                          <body background="../images/bg_content.gif" bgcolor="#FFFFFF" link="#f86a13" vlink="#f86a13" alink="#f86a13" bgproperties="fixed">
                          <div id="content" style=" position: absolute; z-index: 2; top: 12px; left: 8px; width: 730px; visibility: visible">
                          <table width="98%" border="0" cellspacing="0" cellpadding="1">
                          <tr>
                          <td nowrap bgcolor="#eeeeee">&nbsp;&nbsp;</td>
                          <td valign="bottom" bgcolor="#eeeeee" width="90%"><b class="orange">In Memoriam Boom Boom Club 1993-2004</b></td>
                          <td valign="bottom" nowrap bgcolor="#eeeeee" width="120">
                          <p align="right"><b>&nbsp;18,00 &euro;</b></p>
                          </td>
                          <td nowrap bgcolor="#eeeeee">&nbsp;&nbsp;</td>
                          </tr>
                          <tr>
                          <td nowrap>&nbsp;&nbsp;</td>
                          <td valign="top" width="90%">
                          <form name="myForm">
                          <input type="hidden" name="Shirt" value="Jungs - In Memoriam"><br>100% Baumwolle, 185g,<br>Aufdruck &quot;In Memoriam Boom Boom Club 1993-2004&quot;.<br>
                          <br>Farben <span class="klein">(anklicken f&uuml;r Voransicht)</span>:<br>
                          <input type="radio" name="Farbe" value="Schwarz/Weiss" checked onclick="MM_swapImage('Image1','','../images/stuff/Memoriam_schwarz.jpg',0)"> Schwarz/Weiss<br>
                          <span class="klein"><br>
                          </span><br>
                          <table border="0" cellspacing="0" cellpadding="0">
                          <tr>
                          <td align="left" valign="middle">Gr&ouml;sse:</td>
                          <td align="left" valign="middle">&nbsp;<br>
                          </td>
                          <td align="left" valign="middle"><select name="Groesse" size="1" >
                          <option value="000" selected="selected">Bitte ausw&auml;hlen</option>
                          <option value="S">Small</option>
                          <option value="M">Medium</option>
                          <option value="L">Large</option>
                          <option value="XL">X-Large</option>
                          <option value="XXL">XX-Large</option>
                          </select></td>
                          </tr>
                          <tr>
                          <td align="left" valign="middle">St&uuml;ckzahl:</td>
                          <td align="left" valign="middle"></td>
                          <td align="left" valign="middle"><input type="text" name="Anzahl" value="1" size="2"></td>
                          </tr>
                          </table>
                          <br>
                          <p></p>
                          <p><input onclick="Meldung();" type="BUTTON" value="In den Warenkorb"></p>
                          <a href="korb_anzeige.html" target="inhalt">Zum Warenkorb</a>&nbsp;&nbsp;<a href="alternativ.html" target="inhalt">Zur&uuml;ck zur Auswahl<br>
                          <br>
                          <br>
                          </a>
                          </form>
                          </td>
                          <td align="right" valign="top" nowrap width="120"><br>
                          <span class="klein"><a href="../alternativ.html">Zur&uuml;ck zur Auswahl</a></span></td>
                          <td nowrap>&nbsp;&nbsp;</td>
                          </tr>
                          			</table>
                          		</div>
                              </body>
                          
                          </html>
                          Nicht besonders schön, muss aber hier rein passen
                          Zuletzt geändert von Tobsn; 06.08.2004, 07:59.

                          Kommentar

                          Lädt...
                          X