Jan: Syntaxproblem

Hallo,

ich habe in Anlehnung an die SelfHTMl Beispiele ein per Auswahlliste gesteuerten Bildwechsler gebastelt. Er wird in einem HTML Dokument mit nur einem <img /> angewandt. Leider funktioniert er nicht, obwohl ich mir sicher bin, dass der logische Aufbau korrekt ist. Nun kann es nur noch ein Syntax- oder Verständnisfehler sein. Was mache ich falsch?

Html Datei:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="Javascript" type="text/javascript">
<!--
avatar = new Image();
avatar.src = "pics/portrait.gif";     /* Standardgrafik*/
street = new Image();
street.src = "pics/street.jpg"; /* alternativgrafik*/

function Bildwechsel(Bildobjekt) {

if(Bildobjekt == "nothing") {
   document.forms[0].reset();
   document.forms[0].elements[0].blur();
   return;
 }
 else{
 window.document.images[0].src = Bildobjekt.src;
 document.forms[0].reset();
 document.forms[0].elements[0].blur();
}
}

-->
</script>
</head>
<body bgcolor="#E4E4E4">

<form action="">
<select size=1 name="Auswahl"  onChange="Bildwechsel(this.form.Auswahl.options[this.form.Auswahl.options.selectedIndex].value)"
style="width:250px; background-color:#E4E4E4; font-size:9pt; font-family:Book Antiqua;" width="250">
<option value="nothing">[ Bild wählen! ]</option>
<option value="nothing">------------------------</option>
<option value="nothing">------------------------</option>
<option value="avatar" >------Portrait-----</option>
<option value="street" >Street</option>
</select>
</form>
         <img src="pics/portrait.gif" alt="Bild"/>

</body>
</html>

  1. Hi,

    <select size=1 name="Auswahl"  onChange="Bildwechsel(this.form.Auswahl.options[this.form.Auswahl.options.selectedIndex].value)"

    Du übergibst hier einen String (den Inhalt des value-Attributs des ausgewählten option-Elements.

    function Bildwechsel(Bildobjekt) {

    Bildobjekt ist hier also ein String!

    if(Bildobjekt == "nothing") {
    }
    else{
    window.document.images[0].src = Bildobjekt.src;

    Hier versuchst Du also, die src-Eigenschaft des übergebenen Strings auszuwerten.
    Ein String und eine Variable sind verschiedene Dinge.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. ... Danke für die Antwort, diese Einheitsvariable var bei Javascript bringt mich durcheinander.
      So wie folgt gehts allerdings auch nicht, oder?
      Wie kann ich eine variable erzeugen, die als Wert den String
      Bildobjekt trägt?

      <select size=1 name="Auswahl"  onChange="Bildwechsel(this.form.Auswahl.options[this.form.Auswahl.options.selectedIndex].value)"

      function Bildwechsel(Bildobjekt) {
       if(Bildobjekt == "nothing") {
        }
       else{
       var bild = Bildobjekt;
       window.document.images[0].src = bild.src;

      1. Hi,

        ... Danke für die Antwort, diese Einheitsvariable var bei Javascript bringt mich durcheinander.

        Welche Einheitsvariable var?

        var ist keine Variable, sondern das Schlüsselwort, das eine Variablendeklaration kennzeichnet.

        var bild = Bildobjekt;

        Auch das Zuweisen eines Strings an eine Variable macht aus dem String nichts anderes.
        Der Inhalt der Variable bild ist immer noch ein String. Du willst aber den String auswerten.

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hmm,

          und wie könnte man das Problem lösen?

          1. und wie könnte man das Problem lösen?

            Einfach den String benutzen. Teste doch einfach mal was du machst:

            function Bildwechsel(Bildobjekt) {

            if(Bildobjekt == "nothing") {
               document.forms[0].reset();
               document.forms[0].elements[0].blur();
               return;
             }
             else{
             alert(Bildobjekt);
             alert(Bildobjekt.src);
             window.document.images[0].src = Bildobjekt.src;
             document.forms[0].reset();
             document.f

            Struppi.

            1. Hi,

              und wie könnte man das Problem lösen?

              Einfach den String benutzen. Teste doch einfach mal was du machst:

              Nein, der String _muß_ ausgewertet werden.

              Im Kommentar jeweils die Ausgabe des Alert:

              <script type="text/javascript">
              <!--
              var image = new Image();
              image.src = "http://src.selfhtml.org/logo.gif";

              alert(image);     //object
              alert(image.src); //http://src.selfhtml.org/logo.gif

              blubb("image");

              function blubb(bla)
              {
              alert(bla);     // image
              alert(bla.src); // undefined

              alert(eval(bla));     //object
              alert(eval(bla).src); //http://src.selfhtml.org/logo.gif
              }
              //-->
              </script>

              function Bildwechsel(Bildobjekt) {

              if(Bildobjekt == "nothing") {
                 document.forms[0].reset();
                 document.forms[0].elements[0].blur();
                 return;
              }
              else{
              alert(Bildobjekt);
              alert(Bildobjekt.src);
              window.document.images[0].src = Bildobjekt.src;
              document.forms[0].reset();
              document.f

              Struppi.

              cu,
              Andreas

              --
              MudGuard? Siehe http://www.Mud-Guard.de/
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. Hallo,

                und wie könnte man das Problem lösen?

                Eval is evel. Ich würde ein assoziatives Array benutzen.

                var bilder = new Array();
                bilder["avatar"] = new Image();
                bilder["avatar"].src = "pics/portrait.gif";
                bilder["street"] = new Image();
                bilder["street"].src = "pics/street.jpg";

                function bildwechsel(bildstring) {
                  alert(bilder[bildstring].src);
                }

                bildwechsel("avatar");
                bildwechsel("street");

                viele Grüße

                Axel

              2. Einfach den String benutzen. Teste doch einfach mal was du machst:

                Nein, der String _muß_ ausgewertet werden.

                Du hast recht, ich hatte den Thread erst bei deiner Nachricht angefangen zu lesen ;-)

                Aber Andreas, eval ist wirklich evil

                als Alternative zu Axel's Vorschlag gäbe es noch die Möglichkeit den Zugriff per window Objekt:
                var avatar = new Image();
                avatar.src = "pics/portrait.gif";

                street = new Image();
                street.src = "pics/street.jpg";

                function bildwechsel(bildstring) {
                  alert(window[bildstring].src);
                }

                bildwechsel("avatar");
                bildwechsel("street");

                1. Hi,

                  als Alternative zu Axel's Vorschlag gäbe es noch die Möglichkeit den Zugriff per window Objekt:
                    alert(window[bildstring].src);

                  Ah, diese Möglichkeit kannte ich nicht, daher fiel mir (auf die Schnelle) nichts besseres ein als das böse eval...

                  cu,
                  Andreas

                  --
                  MudGuard? Siehe http://www.Mud-Guard.de/
                  Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.