René Marscheider: Opera

hi @all,

hi @all

mich ärgert der Opera wer kann helfen und sieht warum es nicht geht. An der roten Stelle einfach das selected in eine andere < option ... > setzen und Seite neu laden es sollte ein alert aufgehen mit dem value Wert der selected option und ja nach value das unter dem blau in der Seite erscheinen funzt mit allen Browsern nur der Opera will nicht.


Fehlermeldung von Opera:

Error: name: TypeError message: Value on left hand side of '.' is not convertible to Object: document.formular.D1.options[document.formular.D1.selectedIndex]


<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta http-equiv="Content-Language" content="de"> <title>ISP Smtp Server anlegen / ändern</title>

</head> <body topmargin="15" leftmargin="15">

<table border="0" cellspacing="0" cellpadding="0" width="100%" height="100%">   <tr>     <td align="center">

<br>

<script language="JavaScript" type="text/javascript">       <!--       document.write('text');       //-->       </script>

<br>

<table border="1" cellspacing="0" cellpadding="1" width="520">         <form name="formular">         <tr>           <td class="inhalt">

<table border="0" cellspacing="1" cellpadding="10" width="100%">               <tr class="tr">                 <td><a href="java script:parent.TOC.fenster('/jana-admin/admin/help/smtpservers.htm','540');" onfocus="this.blur();"><script language="JavaScript" type="text/javascript">                 <!--                 document.write('text');                 //-->                 </script></a></td>               </tr>             </table>

</td>         </tr>         <tr>           <td><img src="/jana-admin/images/leer.gif" border="0" width="1" height="15"></td>         </tr>         <tr>           <td class="inhalt">

<table border="0" cellspacing="1" cellpadding="5" width="100%">               <tr class="tr">                 <td align="center" width="10%"><input name="C1" type="checkbox" value="ON" onfocus="this.blur();" ></td>                 <td width="90%"><script language="JavaScript" type="text/javascript">                 <!--                 document.write('text');                 //-->                 </script></td>               </tr>             </table>

</td>         </tr>         <tr>           <td><img src="/jana-admin/images/leer.gif" border="0" width="1" height="15"></td>         </tr>         <tr>           <td class="inhalt">

<table border="0" cellspacing="1" cellpadding="5" width="100%">               <tr class="tr">                 <td width="60%"><script language="JavaScript" type="text/javascript">                 <!--                 document.write('text');                 //-->                 </script>:</td>                 <td width="40%"><input class="inp" name="T1" type="text" size="35" value=""></td>               </tr>               <tr class="tr">                 <td><script language="JavaScript" type="text/javascript">                 <!--                 document.write('text');                 //-->                 </script>:</td>                 <td><select name="D1" size="1">                   <option value="0">Keine</option>                   <option value="1" selected>Pop vor Smtp</option>                   <option value="2">Username / Passwort</option>                 </select></td>               </tr>             </table>

</td>         </tr>       </table>

<br>

<table border="1" cellspacing="0" cellpadding="1" width="100%">         <tr>           <td class="inhalt"><script language="JavaScript" type="text/javascript">           <!--

var fu = document.formular.D1.options[document.formular.D1.selectedIndex].value;

alert(fu);

with(document) {

if ( fu == 0 ) {

write('<table bgcolor="#ff0000" border="0" cellspacing="1" cellpadding="0" width="100%">'                       + '<tr class="tr">'                       + '<td> </td>'                       + '</tr>'                       + '</table>');               }

if ( fu == 1 ) {

write('<table bgcolor="#00ff00" border="0" cellspacing="1" cellpadding="5" width="100%">'                       + '<tr class="info">'                       + '<td colspan="2"><p align="justify"> </p></td>'                       + '</tr>'                       + '<tr class="tr">'                       + '<td width="50%">:</td>'                       + '<td width="50%"><select name="D2" size="1">'                       + '<option value="">Bitte wählen</option>'                       + '<option  value="Server1">Server1</option>'                       + '</select>'                       + '</td>'                       + '</tr>'                       + '</table>'

+ '</td>'                       + '</tr>'                       + '<tr>'                       + '<td><img src="/jana-admin/images/leer.gif" border="0" width="1" height="15"></td>'                       + '</tr>'                       + '<tr>'                       + '<td class="inhalt">'

+ '<table bgcolor="#00ff00" border="0" cellspacing="1" cellpadding="5" width="100%">'                       + '<tr class="tr">'                       + '<td width="10%"><input class="inp" name="T4" type="text" size="3" value="" maxlength="2"></td>'                       + '<td width="90%"><p align="justify"> </p></td>'                       + '</tr>'                       + '</table>');               }

if ( fu == 2 ) {

write('<table bgcolor="#0000ff" border="0" cellspacing="1" cellpadding="10" width="100%">'                       + '<tr class="info">'                       + '<td colspan="2"><p align="justify"> </p></td>'                       + '</tr>'                       + '</table>'

+ '</td>'                       + '</tr>'                       + '<tr>'                       + '<td><img src="/jana-admin/images/leer.gif" border="0" width="1" height="15"></td>'                       + '</tr>'                       + '<tr>'                       + '<td class="inhalt">'

+ '<table bgcolor="#0000ff" border="0" cellspacing="1" cellpadding="5" width="100%">'                       + '<tr class="tr">'                       + '<td width="60%">:</td>'                       + '<td width="40%"><input class="inp" name="T2" type="text" size="30" value=""></td>'                       + '</tr>'                       + '<tr class="tr">'                       + '<td>:</td>'                       + '<td> </td>'                       + '</tr>'                       + '</table>');               }           }           //-->           </script>

</td>         </tr>         </form>       </table>

</td>   </tr> </table>

</body> </html>


Danke René

  1. Hallo Rene,

    probiers mal mit
    document.Testform.Auswahl.selectedIndex

    oder http://selfhtml.teamone.de/javascript/objekte/options.htm#selected_index

    Aber da du Opera besitzt, könntest mir auch einen gefallen tun.
    ruf mal http://gigatrack.de/test/fenster2.htm auf
    und klick auf den Button
    dann sollte ein popup aufgehen
    und wenn du das schliesst soll die Hauptseite wechseln.
    IE&Netscape machen es, aber ich bin gespannt was Opera dazu sagt

    schöne Grüsse aus Mannheim
    wolli

    1. Hallo Wolli

      Aber da du Opera besitzt, könntest mir auch einen gefallen tun.

      Aber gerne doch :-)

      ruf mal http://gigatrack.de/test/fenster2.htm auf
      und klick auf den Button
      dann sollte ein popup aufgehen
      und wenn du das schliesst soll die Hauptseite wechseln.
      IE&Netscape machen es, aber ich bin gespannt was Opera dazu sagt

      Klappt mit  Opera 512. auf WinNT problemlos.

      Viele Grüße aus Baden-Baden

      Gerd

      1. Hallo zusammen!

        Klappt mit  Opera 512. auf WinNT problemlos.

        Mit Opera 6 auf Win98SE ebenfalls.

        Gruß,

        kerki

      2. Dankeschön Gerd :-)

        Hallo Wolli

        Aber da du Opera besitzt, könntest mir auch einen gefallen tun.

        Aber gerne doch :-)

        ruf mal http://gigatrack.de/test/fenster2.htm auf
        und klick auf den Button
        dann sollte ein popup aufgehen
        und wenn du das schliesst soll die Hauptseite wechseln.
        IE&Netscape machen es, aber ich bin gespannt was Opera dazu sagt

        Klappt mit  Opera 512. auf WinNT problemlos.

        Viele Grüße aus Baden-Baden

        Gerd

    2. Hallo wolli,

      ruf mal http://gigatrack.de/test/fenster2.htm auf
      und klick auf den Button

      funktioniert auch im Opera 5.12 nach weiterleiten auf die Seite sagt Opera aber folgendes:

      Error:
      name: ReferenceError
      message: Reference to undefined variable: No such variable 'ie'

      gruss
      René

  2. Hallo !

    Error:
    name: TypeError
    message: Value on left hand side of '.' is not convertible to Object: document.formular.D1.options[document.formular.D1.selectedIndex]

    Ich persönlich finde folgende Syntax am einfachsten:

    Im HTML-Tag:
    <select id="testID" ...>

    Im JavaScript:
    var testwert=document.getElementById("testID").options[document.getElementById("testID").selectedIndex].value;

    Damit kommt Opera >= 5 zurecht, und andere moderne Browser sollten es auch.

    Gruß,

    kerki

    1. hi kerki,

      Danke erst einmal für deine Antwort.

      Error:
      name: TypeError
      message: Value on left hand side of '.' is not convertible to Object: document.formular.D1.options[document.formular.D1.selectedIndex]

      Damit kommt Opera >= 5 zurecht, und andere moderne Browser sollten es auch.

      es muß auch mit dem NN 4.x gehen! Das Problem ist ja nicht die Variable sondern das es übergangen wird. Es kommt ja nicht einmal ein alert siehe " alert(fu); " in meinem ersten Beitrag.

      wenn ich diesen Code ganz allein teste ohne das andere drum herum funktioniert es auch mit Opera und das alert erscheint und gibt je nach dem das Value aus.

      -----------------------------------

      <html>
      <head>

      </head>
      <body>

      <form name="formular">

      <select name="D1" size="1">
        <option value="0">Keine</option>
        <option value="1" selected>Pop vor Smtp</option>
        <option value="2">Username / Passwort</option>
      </select>

      <script language="JavaScript" type="text/javascript">
      <!--

      var fu = document.formular.D1.options[document.formular.D1.selectedIndex].value;

      alert(fu);

      //-->
      </script>

      </form>

      </body>
      </html>

      -----------------

      Danke und gruss
      René

    2. hi kerki

      Im HTML-Tag:
      <select id="testID" ...>

      Im JavaScript:
      var testwert=document.getElementById("testID").options[document.getElementById("testID").selectedIndex].value;

      Um nochmal auf deinen Vorschlag zurück zukommen wenn ich das in die Seite einfüge:

      <select id="D1" name="D1" size="1">

      var fu = document.getElementByID("D1").options[document.getElementByID("D1").selectedIndex].value;

      sagt mir Opera folgendes:

      Error:
      name: TypeError
      message: Attempted to call non-function: has undefined value: 'getElementByID'

      gruss
      René

      PS: niemand macht den Opera schlecht ;-)

      1. Hallo René!

        Um nochmal auf deinen Vorschlag zurück zukommen wenn ich das in die Seite einfüge:

        <select id="D1" name="D1" size="1">

        var fu = document.getElementByID("D1").options[document.getElementByID("D1").selectedIndex].value;

        sagt mir Opera folgendes:

        Error:
        name: TypeError
        message: Attempted to call non-function: has undefined value: 'getElementByID'

        Tja, das ist dumm! :-(

        Ich könnte mir vorstellen, dass das Problem daher rührt, dass du den alert() auszugeben versuchst, bevor überhaupt das FORM, in dem der SELECT liegt, abgeschlossen ist.

        Sicher bin ich mir aber keineswegs, und getestet habe ich es auch nicht, dafür war mir dein Code bzw. die Ausgabe, ehrlich gesagt, zu widerspenstig.

        Gruß,

        kerki

        PS: niemand macht den Opera schlecht ;-)

        Na, ich weiß nicht. Mir schwant Übles. ;-)

        1. hi kerki & GerdG,

          folgendes hat funktioniert:

          ---------------------------

          ...

          var sel = document.formular.D1;

          for ( i = 0; i < sel.length; ++i ) {
              if ( sel.options[i].selected == true ) {
                  var fu = sel.options[i].value;
              }
          }

          with(document) {

          if ( fu == 0 ) {

          ...

          -------------------------

          ich verstehe es aber trotzdem nicht warum die erste Methode für sich allein funktioniert ind in die Seite eingebettet nicht. Danke noch mal Gerd für den Tipp mit der Seite.

          gruss
          René

          PS: @kerki es gibt eigendlich keinen schlechten Browser nur schlechte Programmierer. Siehe bei mir, gibt eben doch in den meisten Fällen eine Lösung.

          1. Hallo,

            ich verstehe es aber trotzdem nicht warum die erste Methode für sich allein funktioniert ind in die Seite eingebettet nicht. Danke noch mal Gerd für den Tipp mit der Seite.

            vielleicht ist es der Umstand dass Opera verschachtelte Variablen bzw. mehrere Ebenen im Ecmascript einfach nicht hinbekommt.
            also prinzipiell (auch wenn Opera dieses konkret vielleicht noch hinkriegt)
            statt:
            xx= (yy.substr())+"sampl";
            so:
            zwischen=yy.substr();xx=zwischen+"sampl";
            habe ich so ähnlich schon öfters extra für Opera nachge"bessert".

            Grüsse

            Cyx23