Manfred-BW: IE6 geht nicht, FF geht. Dokumententext kann nicht geändert werd

Hallo zusammen,
in einem Formular kann ich mit Firefox ohne Probleme vorgegebene Einträge umändern und mit den umgeänderten Werten JavaScript Berechnungen durchführen.
Der Intenet Explorer (6) akzeptiert nur die vordefinierten Werte und holt sich für Berechnungen immer die vordefinierten Werte, auch wenn in die Eingabefelder neue Werte eingetragen werden. Was muß ich im Programm ändern, so daß auch der IE die neu eingegebenen Werte übernimmt, ohne das gesamte Programm total neu zu überarbeiten?

Wenn ich z.B. in das Eingabefeld "Numbers to generate" die voreingestellte
4 durch 10 ersetze, setzt IE6 die 10 auf 4 zurück und erzeugt nur 4 Zufallszahlen anstatt 10. Das selbe Problem auch bei den anderen Eingabefeldern.

Wäre für eine einfache Ergänzung des Programms sehr dankbar.
(bitte macht keine Vorschläge, alles neu in CSS oder sonstwas zu machen. Bin froh das überhaupt so zum laufen gebracht zu haben und daß ich mit cut&paste die Ergebnisse in die Zwischenablage übernehmen kann)

Manfred-BW

Hier ist der komplette Programmcode zum ausprobieren:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Random Number </title>
</head>
<body>
<BODY BACKGROUND="" BGCOLOR="#FFFFCC" >
 <FORM ACTION="#" NAME="Random">
<div align="center">
<center>
<h2 align=center>Random Number Generator
<br>
 Number of numbers to generate (max 20):
<input type="text" name="NumbersToGenerate" size="2" onfocus="this.value = '' " value="4" />
<br>
<input type="text" name="Min" size="2" onfocus="this.value = '' " value="1" />  = Min
<input type="text" name="Max" size="2" onfocus="this.value = '' " value="10" /> = Max  value     --> range for the numbers
<br>
</font></p>
</center>
</div>
</FORM>

<h2 align=center>Random Numbers with Variable Number Range
<br> <center>
<script language="JavaScript">

var x1
var min = (parseInt(document.Random.Min.value));
var max = (parseInt(document.Random.Max.value));
var bl = (parseInt(document.Random.NumbersToGenerate.value));

// generate max 20 numbers
  if(bl>20)
  {alert("Too large  number. Please try again"); bl = 2 }

document.write("<td colspan='6' align='middle'><INPUT TYPE='button' VALUE='Generate New Numbers' onClick=NewNumbers();></form></td>");

document.write("<br>"+bl+" numbers to generate");
document.write("<table border='1'><tr>");

//start generating random numbers; bl=number of rows
for(g = 1; g < bl + 1 ; g++)  // generate bl numbers
 {

// calculate  number
 x1 = Math.floor(Math.random() * (max - min + 1)) + min;

{
//  start write table line ; write the random numbers into yellow table
{document.write("<td align = 'center' bgcolor = '#FFFF99'>" + x1 + "</td>"); }
document.write("<tr>");

} // End of table line. Start new line
}

document.write("<td colspan='2' align='middle'><INPUT TYPE='button' VALUE='Generate New Numbers' onClick=NewNumbers();></form></td>");
function NewNumbers()
{ location.reload();  }
document.write("</tr></table>");

document.write("</tr></table>");

</script> <br>
<noscript>
<font color='FF3300'>
The Random generator requires the use of Javascript <br>
Please enable Javascript <br>
</noscript><br>
<font color='000000'>
<font face="Verdana" size=2>
<br>
<br> </center> </body> </html>

  1. Hi Manfred,

    Wäre für eine einfache Ergänzung des Programms sehr dankbar.
    (bitte macht keine Vorschläge, alles neu in CSS oder sonstwas zu machen. Bin froh das überhaupt so zum laufen gebracht zu haben und daß ich mit cut&paste die Ergebnisse in die Zwischenablage übernehmen kann)

    Das ist nicht mit einer einfachen Ergänzung getan. Der Code weist so viele Fehler und Schwächen auf, dass es nicht sinvoll ist den zu flicken.

    Folgende Punkte mal zum Anreiz.

    getElementByID
    type="text/javascript"
    innerHTML
    Javascript weitesgehend in Funktionen einsetzen

    Mal ein Beispiel, leider auch kein perfektes, wie dein Wunsch ein anderer umgesetzt hat: Webtoolbox

    Oli

    1. Hallo Oli,

      danke für Deine schnelle Antwort.

      Werde mich mal mit Deinen Stichworten befassen.
      Richtig geholfen hat Deine allgemeine Antwort jedoch nicht.

      Der Hinweis auf die Beispiellösung ist genau das, was ich nicht wollte und deshalb extra erwähnt habe:
      umprogrammieren und CSS einsetzen. Dein Beispiellink sieht mir eher nach einer Werbeaktion für professionelle Programmierhilfen aus. Mit Tricks, wie z.B. den JavaScript Code in Kommentarzeichen einzuschließen.

      Mein Programm funktioniert ja einwandfrei in Firefox und es kann wohl nicht sein, daß man sehr viel anders machen muß, damit es auch mit dem IE funktioniert. Wahrscheinlich ist es nur eine Kleinigkeit wie zusätzliche Leerzeichen oder sowas, die nur ein IE Spezialist kennt.

      Ob es ein sauberer Stil ist, um auf meine Lösung zu kommen steht gar nicht zur Debatte, sondern nur die Frage warum es mit IE nicht geht. Darauf bist Du leider nicht konkret eingegeangen.

      Sauber zu programmieren ist im Prinzip ok, aber außer diesem Projekt habe ich keine Ambitionen noch mehr in HTML und Javascript zu machen, und schon gar nicht, mich auf die Eigenheiten vom IE zu spezialisieren, da ich ein Firefoxanhänger bin.

      Ich möchte mein Programm nur deshalb zum IE kompatibel machen, weil es jemand ausprobieren soll, der nur den IE hat.

      Mein Beispielprogramm ist nur ein Auszug aus meinem richtigen Programm,
      um den Fehler zu lokalisieren. Das richtige Programm ist wirklich sehr umfangreich und eine Umprogrammierung würde sehr viel mehr Zeit beanspruchen als das kurze Beispiel vermuten läßt.

      Danke trotzdem, daß Du Dich mit meinem Problem befaßt hast.

      Vielleicht hat ja jemand anders eine einfache Lösung für mein Problem?

      MfG
      Manfred-BW

      Hi Manfred,

      »» Wäre für eine einfache Ergänzung des Programms sehr dankbar.
      »» (bitte macht keine Vorschläge, alles neu in CSS oder sonstwas zu machen. Bin froh das überhaupt so zum laufen gebracht zu haben und daß ich mit cut&paste die Ergebnisse in die Zwischenablage übernehmen kann)
      »»

      Das ist nicht mit einer einfachen Ergänzung getan. Der Code weist so viele Fehler und Schwächen auf, dass es nicht sinvoll ist den zu flicken.

      Folgende Punkte mal zum Anreiz.

      getElementByID
      type="text/javascript"
      innerHTML
      Javascript weitesgehend in Funktionen einsetzen

      Mal ein Beispiel, leider auch kein perfektes, wie dein Wunsch ein anderer umgesetzt hat: Webtoolbox

      Oli

  2. Hallo nochmal an alle:

    Oli schrieb, daß mein Code so viele Fehler und Schwächen habe, daß es sich
    nicht lohne, alles zu reparieren.

    Ich kann zustimmen, daß der Code wohl nicht sehr schön ist.

    Aber: Der Code funktioniert sowohl in Firefox, als auch mit dem IE.
    Es wird auch mit dem IE alles so ausgedruckt wie gewünscht und auch Zufallszahlen auf Knopfdruck neu erzeugt wie gewünscht.

    Das einzige was nicht funktioniert, ist die Übernahme der im Formular
    nachträglich geänderten Eingabewerte.

    Die per Code voreingestellten Werte werden auch vom IE problemlos übernommen und verarbeitet !

    Also kann die Lösung doch nicht so kompliziert sein oder?

    Die Frage ist ganz einfach: warum übernimmt der IE aus dem Formular nicht die nachträglich neu eingegebenen Werte? Was konkret muß anders geschrieben sein?

    Manfred-BW

    Hallo zusammen,
    in einem Formular kann ich mit Firefox ohne Probleme vorgegebene Einträge umändern und mit den umgeänderten Werten JavaScript Berechnungen durchführen.
    Der Intenet Explorer (6) akzeptiert nur die vordefinierten Werte und holt sich für Berechnungen immer die vordefinierten Werte, auch wenn in die Eingabefelder neue Werte eingetragen werden. Was muß ich im Programm ändern, so daß auch der IE die neu eingegebenen Werte übernimmt, ohne das gesamte Programm total neu zu überarbeiten?

    Wenn ich z.B. in das Eingabefeld "Numbers to generate" die voreingestellte
    4 durch 10 ersetze, setzt IE6 die 10 auf 4 zurück und erzeugt nur 4 Zufallszahlen anstatt 10. Das selbe Problem auch bei den anderen Eingabefeldern.

    Wäre für eine einfache Ergänzung des Programms sehr dankbar.
    (bitte macht keine Vorschläge, alles neu in CSS oder sonstwas zu machen. Bin froh das überhaupt so zum laufen gebracht zu haben und daß ich mit cut&paste die Ergebnisse in die Zwischenablage übernehmen kann)

    Manfred-BW

    Hier ist der komplette Programmcode zum ausprobieren:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title> Random Number </title>
    </head>
    <body>
    <BODY BACKGROUND="" BGCOLOR="#FFFFCC" >
    <FORM ACTION="#" NAME="Random">
    <div align="center">
    <center>
    <h2 align=center>Random Number Generator
    <br>
    Number of numbers to generate (max 20):
    <input type="text" name="NumbersToGenerate" size="2" onfocus="this.value = '' " value="4" />
    <br>
    <input type="text" name="Min" size="2" onfocus="this.value = '' " value="1" />  = Min
    <input type="text" name="Max" size="2" onfocus="this.value = '' " value="10" /> = Max  value     --> range for the numbers
    <br>
    </font></p>
    </center>
    </div>
    </FORM>

    <h2 align=center>Random Numbers with Variable Number Range
    <br> <center>
    <script language="JavaScript">

    var x1
    var min = (parseInt(document.Random.Min.value));
    var max = (parseInt(document.Random.Max.value));
    var bl = (parseInt(document.Random.NumbersToGenerate.value));

    // generate max 20 numbers
      if(bl>20)
      {alert("Too large  number. Please try again"); bl = 2 }

    document.write("<td colspan='6' align='middle'><INPUT TYPE='button' VALUE='Generate New Numbers' onClick=NewNumbers();></form></td>");

    document.write("<br>"+bl+" numbers to generate");
    document.write("<table border='1'><tr>");

    //start generating random numbers; bl=number of rows
    for(g = 1; g < bl + 1 ; g++)  // generate bl numbers
    {

    // calculate  number
    x1 = Math.floor(Math.random() * (max - min + 1)) + min;

    {
    //  start write table line ; write the random numbers into yellow table
    {document.write("<td align = 'center' bgcolor = '#FFFF99'>" + x1 + "</td>"); }
    document.write("<tr>");

    } // End of table line. Start new line
    }

    document.write("<td colspan='2' align='middle'><INPUT TYPE='button' VALUE='Generate New Numbers' onClick=NewNumbers();></form></td>");
    function NewNumbers()
    { location.reload();  }
    document.write("</tr></table>");

    document.write("</tr></table>");

    </script> <br>
    <noscript>
    <font color='FF3300'>
    The Random generator requires the use of Javascript <br>
    Please enable Javascript <br>
    </noscript><br>
    <font color='000000'>
    <font face="Verdana" size=2>
    <br>
    <br> </center> </body> </html>

    1. Hi,

      Oli schrieb, daß mein Code so viele Fehler und Schwächen habe, daß es sich
      nicht lohne, alles zu reparieren.

      Ich kann zustimmen, daß der Code wohl nicht sehr schön ist.

      Das hat nichts mit schön zu tun, es sind FEHLER vorhanden. Und nur weil es zufällig im FF funktioniert und mit ein wenig Änderungen im IE, bleiben doch gravierende Fehler. Ein Auto mit einer defekten Bremsscheibe fährt auch, aber nicht mehr lange. Du musst selbst wissen was du machst, ich würde jedoch nochmal ganz von vorne und in Ruhe beginnen.

      Oli

  3. Hi,

    Der Intenet Explorer (6) akzeptiert nur die vordefinierten Werte und holt sich für Berechnungen immer die vordefinierten Werte, auch wenn in die Eingabefelder neue Werte eingetragen werden.

    Und an welcher Stelle liest du die aktuellen Werte aus den Feldern aus?

    Ich sehe dich nur ein einziges Mal die Werte aus den Feldern auslesen, und das ist bereits waehrend des Ladens des Dokumentes.

    Dass der Firefox hier das von dir gewuenschte Verhalten zeigt, liegt wohl daran, dass er beim neu Laden eines Dokumentes (wenn eine gecache-te Dokumentversion neu aufgebaut wird) bereits durch den Nutzer gemachte Formulareingaben beibehaelt, anstatt die Formularfelder wieder auf ihre Ausgangswerte zurueckzusetzen.

    Was muß ich im Programm ändern, so daß auch der IE die neu eingegebenen Werte übernimmt, ohne das gesamte Programm total neu zu überarbeiten?

    Lese sie dann aus, wenn der Nutzer sie eingegeben hat.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hallo Chris,

      danke für Deinen Hinweis, der ist sehr hilfreich.
      Beginne das Problem langsam zu verstehen. Wußte nicht, daß
      Firefox die Daten beim neu laden behält und IE nicht.

      Die Funktion

      function NewNumbers()
      { location.reload();  }

      wird beim Klick auf den Button jedesmal ausgeführt und damit wird die Seite jedesmal neu geladen. Firefox behält die eingegebenen Werte und IE lädt jedesmal neu die vordefinierten Werte.

      Muß mir wohl anstatt location.reload was neues ausdenken, oder?

      Daß das Programm beim laden bereits einmal ausgeführt wird ist ok aber nicht zwingend erforderlich.
      Nun ist der Code so zu modifizieren, daß beim Klick auf den Button nicht die ganze Seite neu geladen wird, sondern....?... irgendwie die geänderten Daten aus den Eingabefeldern geholt werden und in JavaScript verarbeitet werden.

      Irgend welche Vorschläge?
      (Für mich ist die ganze Programmiererei in HTML und Javascript neu und ich programmiere sonst für den Hausgebrauch nur im ordinären unstrukturierten GFA-BASIC)

      MfG Manfred-MW

      Hi,

      »» Der Intenet Explorer (6) akzeptiert nur die vordefinierten Werte und holt sich für Berechnungen immer die vordefinierten Werte, auch wenn in die Eingabefelder neue Werte eingetragen werden.

      Und an welcher Stelle liest du die aktuellen Werte aus den Feldern aus?

      Ich sehe dich nur ein einziges Mal die Werte aus den Feldern auslesen, und das ist bereits waehrend des Ladens des Dokumentes.

      Dass der Firefox hier das von dir gewuenschte Verhalten zeigt, liegt wohl daran, dass er beim neu Laden eines Dokumentes (wenn eine gecache-te Dokumentversion neu aufgebaut wird) bereits durch den Nutzer gemachte Formulareingaben beibehaelt, anstatt die Formularfelder wieder auf ihre Ausgangswerte zurueckzusetzen.

      »» Was muß ich im Programm ändern, so daß auch der IE die neu eingegebenen Werte übernimmt, ohne das gesamte Programm total neu zu überarbeiten?

      Lese sie dann aus, wenn der Nutzer sie eingegeben hat.

      MfG ChrisB

      1. Hi,

        bitte zitiere doch endlich mal vernuenftig, und unterlasse das eklige TOFU - Danke.

        Muß mir wohl anstatt location.reload was neues ausdenken, oder?

        Du musst die *aktuellen* Werte aus den Formularfeldern auslesen - aktuell sind sie zu dem Zeitpunkt, zu dem du die Ermiuttlung der Zufallszahlen durchfuehren willst. Derzeit liest du sie nur einmal beim Laden des Dokumentes aus - wobei dir zufaelligerweise im Firefox dessen Verhalten bzgl. Formularfeldinhalten entgegen kommt, was aber die generelle Vorgehensweise nicht sinnvoller macht.

        Bschaeftige dich mit dem Konzept von Funktionen.
        Erstelle dir eine solche, die sich ueber einen Link/Button aufrufen laesst (href="javascript:..." oder onclick) - und *dann* die aktuellen Feldinhalte ausliest, und damit die Berechnung durchfuehrt.

        Statt document.write zur Ausgabe wirst du dir dann auch etwas anderes ueberlegen muessen, weil das, wenn es nach dem Laden des Dokuments ausgefuehrt wird, dieses komplett ersetzt. Den HTML-Code erst in einer Stringvariablen zusammenzubauen, und dann der innerHTML-Eigenschaft eines Elements (die Referenz darauf bspw. per document.getElementById ermittelt) zuzuweisen, bietet sich fuer einen Anfaenger der Einfachheit halber an.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hi Chris
          .
          .
          .

          Beschaeftige dich mit dem Konzept von Funktionen

          Nun, eine Funktion habe ich ja schon mal verwendet, also werde ich auch eine andere schaffen.
          .
          .
          .

          Den HTML-Code erst in einer Stringvariablen zusammenzubauen, und dann der »» innerHTML-Eigenschaft eines Elements (die Referenz darauf bspw. per
          document.getElementById ermittelt) zuzuweisen, bietet sich fuer einen
          Anfaenger der Einfachheit halber an.

          Ja, werde mich als nächstes damit befassen.

          Danke für Deine Mühe, hat mir sehr geholfen. Weiß jetzt wie ich das hinbekommen kann und muß nicht andauernd nach irgend welchen Syntaxfehlern suchen...

          Mfg Manfred-BW

          MfG ChrisB