Anzeige: united-domains - Die ganze Welt der Domains
Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.
Jetzt Domain-Check bei united-domains!
Formularprüfung
Autor: habus
Datum: 11.01.2012 15:17:28
Hallo Experten,
Ich habe hier ein kleines Formular, bestehend aus einem Textfeld und einer Auswahlliste. Der Wert der Auswahlliste soll beim anklicken zur Weiterverarbeitung in das Textfeld übernommen werden, was auch prima klappt. Gibt der User einen neuen Text (hier Webcam-Adresse) ein, soll beim Klick auf den Button OK geprüft werden, ob a.) das Eingabefeld nicht leer ist und ob b.) der Eintrag schon vorhanden ist.
a.) wird realisiert durch den leeren value in der ersten Option.
b.) funktioniert für die vorhandene Beispieladresse auch. Gibt man jedoch eine neue ein, funktioniert das Script nicht wie gewollt, es übernimmt also Einträge so oft, wie man klickt.
Das liegt meiner Meinung nach daran, dass der Wert des Eingabefeldes in den Options nur als Text gespeichert wird.
Wie kann ich erreichen, das der Inhalt des Eingabefeldes sowohl im Value als auch im Text gespeichert wird. Nur Value nützt mir nichts, da der Eintrag dann in der Liste nicht zu sehen ist.
Gruß Habus
<html>
<head>
<title>Beispiel</title>
<script type="text/javascript">
function chkFormular ()
        {
        var Eingabe = document.form1.camurl.value;
        var Liste = document.form1.sel;
        var vorhanden = false;
        for (var i = 1; i <= Liste.length; i++)
                {
                if (Liste.options.value == Eingabe)
                        {
                        vorhanden = true;
                        alert ("vorhanden");
                        }
                }
                if (!vorhanden)
                {
                NeuerEintrag = new Option(Eingabe);
                Liste.options[Liste.options.length] = NeuerEintrag;
                }
        }
</script>
</head>
<body>
<form name="form1" action="#">
<b>Webcam-Adresse:</b><br>
<input type="text" name="camurl" style="width:300px"><br><br>
<b>Zur Auswahliste hinzufügen ?</b>
<input type="button" value="OK" style="width:101px" onclick="chkFormular();"><br><br>
<select name="sel" style="width:300px" onchange="this.form.camurl.value=this.options[this.selectedIndex].value;">;
<option value="">Bitte wählen sie eine Webcam</option>
<option value="http://www.thueringer-webcams.de/kunden/mdr/weimar/livebild-pal.jpg">Weimar, Theaterplatz</option>
</select>
<br><br>
<b>Aktualisierung in Sekunden:</b>
<br>
<input type="text" id="interval" value="">
</form>
<br>
<img src="habus.png" alt="" width="53" height="93">
<p>Webcam 1.0 by Habus</p>
</body>
</html>
Re: Formularprüfung
Autor: reporter
Datum: 12.01.2012 10:39:29
Hallo,
dein Javascriptkode weißt drei kleine, aber feine Fehler auf:
Zeile: >for (var i = 1; i <= Liste.length; i++)
muß so sein -> for (var i = 0; i < Liste.length; i++)
da die Einträge der Auswahlliste in einem Array gespeichert werden. Und das erste Element beginnt immer mit 0. Dadurch mußt du auch anstelle von '<=' '<' schreiben.
Zeile: > if (Liste.options.value == Eingabe)
Fast richtig. Du hast es weiter unten schon richtig geschrieben, hier jedoch nicht. Richtig muß es so sein
-> if  (Liste.options[i].value  == Eingabe)
PS: Beim Programmieren gibt es ein ungeschriebenes Gesetz: Variablennamen beginnen immer mit einem kleinen Buchstaben, Funktionen und Methoden immer mit einem großen Buchstaben.
Re: Formularprüfung
Autor: habus
Datum: 12.01.2012 12:04:41
Gut! Vielen Dank, ich habs schon korrigiert.
Nur leider löst das nicht mein Problem...
Gruß Habus
Re: Formularprüfung
Autor: reporter
Datum: 12.01.2012 13:08:57
> Gut! Vielen Dank, ich habs schon korrigiert.
> Nur leider löst das nicht mein Problem...
Welches Problem?
Nach dem ich die Fehler korrigiert habe, funktionierte alles was du wolltest. Oder habe ich da etwas übersehen?
Ich habe aus deinem Geschriebenen folgende "Anforderungen" ermittelt:
- Prüfung ob der eingetragene Wert bereits vorhanden ist
- Wenn nein, Inhalt als Value und als Text hinzufügen.
Hier wiederhole ich meine Aussage: Nachdem ich die Fehler beseitigt habe funktionierte deine Sache.
Re: Formularprüfung
Autor: kicia
Datum: 12.01.2012 13:21:38
> Gut! Vielen Dank, ich habs schon korrigiert.
> Nur leider löst das nicht mein Problem...
Ich hab Deinen Code kopiert und die änderungen von reporter gemacht, und ein neuer Eintrag wird nicht übernommen, wenn er schon drin steht.
Was funktioniert noch nicht?
> Beim Programmieren gibt es ein ungeschriebenes Gesetz...
Auf jeden Fall sollte man konsequent einen Stil verfolgen.
Aber ich meine, solche Gesetze sind nicht immer ausnahmslos sinnvoll.
Ich finde, es macht durchaus Sinn, sich an "gängige Praxis" zu halten. Daher verwende ich zB auch meistens die "Kamelschreibweise", beginnend mit kleinem Buchstaben, wie es auch bei den DOM methoden ist (@reporter: was ja Deinem Gesetz widerspricht).
Man sollte auch berücksichtigen, welche Sprache man verwendet (in PHP sind variablen bereits durch $ markiert, der Unterstrich hat in manchen Sprachen eine feste Bedeutung, ...).
Beim WSH ist es auch wieder anders vorgesehen als im HTML DOM. Zudem kann man theoretisch sowohl WSH als auch DOM mit verschiedenen Sprachen scripten. Einheitliche Gesetzte sind also schwer realisierbar.
Re: Formularprüfung
Autor: reporter
Datum: 12.01.2012 13:37:31
Ähem, mit der Schreibweise bei den Methode habe ich da etwas verwechselt. Entschuldigung.
Re: Formularprüfung
Autor: habus
Datum: 12.01.2012 13:51:45
Ahja, grad nochmal getestet. Im Firefox und im Chrome funktioniert es (fast) wie gewollt. Im IE leider nicht, da kann ich denselben Eintrag bis zum abwinken hinzufügen.
Der IE ist aber Voraussetzung für Minianwendungen...
Und eins ist allen Browsern gemeinsam, die zugefügten Texte werden nicht zurück ins Textfeld übernommen. (Kein Value?)
Gruß Habus
Re: Formularprüfung
Autor: reporter
Datum: 12.01.2012 14:18:37
> Ahja, grad nochmal getestet. Im Firefox und im
> Chrome funktioniert es (fast) wie gewollt. Im IE
> leider nicht, da kann ich denselben Eintrag bis
> zum abwinken hinzufügen.
> Der IE ist aber Voraussetzung für
> Minianwendungen...
du hättest sagen müssen das du den IE6 oder IE7 verwendest. Im IE8 funktioniert dies nämlich.
Ändere dazu die entsprechende Zeile mit dieser:
NeuerEintrag = new Option(Eingabe, Eingabe, false, false);
(siehe http://de.selfhtml.org/javascript/objekte/options.htm#neue_elemente )
> Und eins ist allen Browsern gemeinsam, die
> zugefügten Texte werden nicht zurück ins Textfeld
> übernommen. (Kein Value?)
Was meinst du damit? Bitte beschreibe dieses genauer und verwende dazu einfache Wörte und Satzbau.
Re: Formularprüfung
Autor: habus
Datum: 12.01.2012 14:59:17
> du hättest sagen müssen das du den IE6 oder IE7
> verwendest. Im IE8 funktioniert dies nämlich.
Nö, ich hab den IE9, aber hat trotzdem nicht funktioniert.
> Ändere dazu die entsprechende Zeile mit dieser:
> NeuerEintrag = new Option(Eingabe, Eingabe,
> false, false);
Aber jetzt!
> > Und eins ist allen Browsern gemeinsam, die
> > zugefügten Texte werden nicht zurück ins
> Textfeld
> > übernommen. (Kein Value?)
>
> Was meinst du damit? Bitte beschreibe dieses
> genauer und verwende dazu einfache Wörte und
> Satzbau.
Sorry, war doof beschrieben. Egal, ob das Eingabefeld leer ist oder schon was drin steht, wenn ich einen Eintrag aus der Liste anklicke, muss dieser ins Textfeld übernommen werden. Das hat er nicht gemacht. Hat sich jedoch mit Deinem Tip gleich mit erledigt. Funktioniert jetzt alles prima!
Ich danke Euch ganz herzlich!!!!!!!!!!
Gruß Habus
Re: Formularprüfung
Autor: habus
Datum: 15.01.2012 16:30:41
Und da bin ich wieder....
Funktioniert leider doch nicht so, wie es sein soll. Ich kann zwar im Textfeld eingeben, was ich will und soviel ich will, steht alles in der Liste drin, sofern es nicht schon vorhanden war. Soweit also gut!
Jedoch sind die Daten nach einer Aktualisierung des Browsers dann komplett wieder verschwunden, bis auf die, die direkt im html-Dokument stehen. Kann ich irgendwie verhindern, dass der Browser die "vergisst"?
Nach Möglichkeit ohne php, davon hab ich erst recht keine Ahnung...;-))
Gruß Habus
Re: Formularprüfung
Autor: kicia
Datum: 16.01.2012 09:17:24
> Kann ich irgendwie verhindern, dass der Browser
> die "vergisst"?
> Nach Möglichkeit ohne php, davon hab ich erst
> recht keine Ahnung...;-))
Dass die Daten beim Aktualisieren weg sind, ist völlig normal. Für den Browser ist das das selbe, wie wenn Du eine neue Seite lädst, die mit der vorigen nichts zu tun hat.
Du musst die eingegebenen Daten also Speichern.
Es geht immernoch um jene Windowsanwendungen, mit denen ich mich nicht auskenne, richtig?
Im Web würde ich das mit Cookies lösen, bei Windowsscripting würde ich das mit dem Filesystemobject machen. Was davon bei Dir funktioniert, weiss ich aber nicht, vielleicht ja sogar beides.
cookies:
http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=cookies
Filesystemobject:
http://msdn.microsoft.com/en-us/library/314cz14s(v=VS.84).aspx
Re: Formularprüfung
Autor: habus
Datum: 16.01.2012 14:19:03
> > Kann ich irgendwie verhindern, dass der
> Browser
> > die "vergisst"?
> > Nach Möglichkeit ohne php, davon hab ich
> erst
> > recht keine Ahnung...;-))
>
> Dass die Daten beim Aktualisieren weg sind, ist
> völlig normal. Für den Browser ist das das selbe,
> wie wenn Du eine neue Seite lädst, die mit der
> vorigen nichts zu tun hat.
> Du musst die eingegebenen Daten also Speichern.
>
> Es geht immernoch um jene Windowsanwendungen, mit
> denen ich mich nicht auskenne, richtig?
> Im Web würde ich das mit Cookies lösen, bei
> Windowsscripting würde ich das mit dem
> Filesystemobject machen. Was davon bei Dir
> funktioniert, weiss ich aber nicht, vielleicht ja
> sogar beides.
>
> cookies:
>
> http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=cookies
>
> Filesystemobject:
>
> http://msdn.microsoft.com/en-us/library/314cz14s(v=VS.84).aspx
Hallo... Ja genau, es geht immer noch um das Gadget.
Das mit dem filesystemobject scheint mit interessant, ich werde damit mal rumtesten. Die Einträge in eine separate Textdatei zu speichern, wäre sicher die beste Lösung. Ich hab nur noch keinen Plan, wie ich es in mein Script einarbeiten soll. Steh ich bestimmt bald wieder hier auf der Matte ;-)
Gruß Habus
Re: Formularprüfung
Autor: reporter
Datum: 17.01.2012 09:51:46
Hallo,
um Mißverständnisse aus dem Weg zu gehen.. Handelt es sich hierbei um WSH-Programmierung bzw. serverseitige Programmierung, oder um eine Seite die vom Browsers aus Aktionen machen sollen?
Re: Formularprüfung
Autor: habus
Datum: 17.01.2012 12:13:56
> Hallo,
>
> um Mißverständnisse aus dem Weg zu gehen..
> Handelt es sich hierbei um WSH-Programmierung
> bzw. serverseitige Programmierung, oder um eine
> Seite die vom Browsers aus Aktionen machen
> sollen?
Hallo,
Es soll ein Sidebar-Gadget werden. Läuft also alles lokal auf dem Rechner des Anwenders.
Re: Formularprüfung
Autor: habus
Datum: 17.01.2012 18:48:53
Also nach mehrstündigem Suchen komme ich langsam zu dem Ergebnis, das das gar nicht geht... Jedenfalls nicht mit einer Textdatei, selbst wenn ich die irgendwie in die Auswahlliste importieren kann, wie soll ich eine einzelne Zeile auswählen...
Und mit Cookies sieht's auch nicht besser aus..., sind ja Textdateien. 
Gruß Habus
Re: Formularprüfung
Autor: kicia
Datum: 17.01.2012 21:08:02
> Also nach mehrstündigem Suchen komme ich langsam
> zu dem Ergebnis, das das gar nicht geht...
Heisst das also, dass es Dir von Deinen Gadgets aus weder mit Cookies noch mit WSH gelungen ist, irgendwelche Daten zu speichern oder zu laden? Ist es Dir überhaupt irgendwie gelungen?
> Jedenfalls nicht mit einer Textdatei, selbst wenn
> ich die irgendwie in die Auswahlliste importieren
> kann, wie soll ich eine einzelne Zeile
> auswählen...
Wenn Du irgendwie Daten (text oder cookies) speichern/laden kannst, dann kann kriegen wir das bestimmt auch korrekt in die Auswahlliste.
> Und mit Cookies sieht's auch nicht besser aus...,
> sind ja Textdateien.
bei Cookies würde sich aber der Browser um das laden und schreiben kümmern, da musst Du nichtmal wissen, wo die Datei liegt.
Re: Formularprüfung
Autor: habus
Datum: 17.01.2012 21:12:08
Ich experimentiere grade mit diesem Script. Hab ich im Inet gefunden...
<html>
    <head>
        <title>wir speichern heute lokal</title>
        <OBJECT
            ID="MyFileSystem"
            CLASSID="CLSID:0D43FE01-F093-11CF-8940-00A0C9054228"
            CODEBASE="http://msdn.microsoft.com/scripting/scrrun/x86/
            srt31en.cab#version=3,1,0,2230"
            WIDTH=0
            HEIGHT=0
            >
        </OBJECT>
<script type="text/javascript">
function load(){
// nur im Explorere steht die Funktion zur Verfuegung
if (navigator.appName.indexOf("Microsoft") ==-1) {
  alert('Funktion steht nur im Internet-Explorer zur Verfügung!');
  return;  //kein Explorer, also abbrechen
  }
// wenn kein Pfad angegeben ist, abbrechen
if (document.das_form.pfad.value=="")  {
  alert('Geben Sie einen Pfad für die Artikel-Datei ein!');
  return;
  }
// wenn die Datei nicht existiert, abbrechen
if (!(MyFileSystem.FileExists(document.das_form.pfad.value)))  {
  alert('Datei: '+document.das_form.pfad.value+' existiert nicht!');
  return;
  }
// alles ok, dann laden
textstream = MyFileSystem.OpenTextFile(document.das_form.pfad.value);
//Dateiinhalt in das TExtfeld im Formular schreiben
document.das_form.text.value = textstream.ReadAll();
textstream.Close();
alert(' Daten geladen!');
}
function save(){
// nur im Explorere steht die Funktion zur Verfuegung
if (navigator.appName.indexOf("Microsoft") ==-1)  {
  alert('Funktion steht nur im Internet-Explorer zur Verfügung!');
  return;
  }
// wenn kein Pfad angegeben ist, abbrechen
if (document.das_form.pfad.value=="") {
  alert('Geben Sie einen Pfad für die Artikel-Datei ein!');
  return;
  }
// Datei, die im Formular angegeben ist, öffnen
textstream = MyFileSystem.CreateTextFile(document.das_form.pfad.value,true);
// Inhalt des Textareas namens text schreiben
textstream.Write(das_form.text.value);
textstream.Close();
alert('Daten gespeichert!');
}
</script>
</head>
<body>
<!--- das Formular mit Eingabe fuer Pfad und Daten --->
<form name="das_form">
  Pfad: <input type="text" name="pfad" value="c:"><br>
  Text: <textarea name="text" cols="30" rows="5"> hallo! </textarea><br>
        <input type="button" value="Load!" onclick="javascript:load()">
        <input type="button" value="Save!" onclick="javascript:save()">
</form>
</body>
</HTML>
Re: Formularprüfung
Autor: kicia
Datum: 17.01.2012 21:20:03
cookies wären übrigens der wesentlich einfachere weg, weil der Browser sich um alles kümmert.
Als test, ob WSH funktioniert, starte mal diese funktion in deinem Gadget, und sage, was dabei herauskommmt:
        function testFso()
        {
            var fso;
            try {
                fso = new ActiveXObject("Scripting.Filesystemobject");
                alert("Filesystemobject erfolgreich erzeugt");
            }
            catch( e ) { alert( "Filesystemobject nicht verfügbar n(" + e + ")" ); }
        }
Re: Formularprüfung
Autor: kicia
Datum: 17.01.2012 21:27:49
diese variante, das Dateisystem anzusprechen kannte ich noch gar nicht.
> if (navigator.appName.indexOf("Microsoft") ==-1) ...
Die Browserweiche kannst Du Dir dann ja wohl sparen, da andere Browser gar nicht im Spiel sind.
> function save(){ ...
Die save funktion muss sehr viel komplizierter werden.
ZB könnten Verzeichnisse nicht vorhanden sein, Dateien oder Verzeichnisse schreibgeschützt sein oder keine ausreichenden Zugriffsrechte vorhanden sein.
Darum: wenn möglich, würde ich für kleine Datenmengen cookies verwenden. Viiiel einfacher.
Re: Formularprüfung
Autor: habus
Datum: 17.01.2012 21:36:31
> diese variante, das Dateisystem anzusprechen
> kannte ich noch gar nicht.
>
> > if (navigator.appName.indexOf("Microsoft")
> ==-1) ...
>
> Die Browserweiche kannst Du Dir dann ja wohl
> sparen, da andere Browser gar nicht im Spiel
> sind.
>
>
> > function save(){ ...
> Die save funktion muss sehr viel komplizierter
> werden.
> ZB könnten Verzeichnisse nicht vorhanden sein,
> Dateien oder Verzeichnisse schreibgeschützt sein
> oder keine ausreichenden Zugriffsrechte vorhanden
> sein.
>
> Darum: wenn möglich, würde ich für kleine
> Datenmengen cookies verwenden. Viiiel einfacher.
Ja, die Browserweiche kann wech... Ich hab das Script ja vorhin erst gefunden und erstmal getestet. Es speichert zumindest erstmal eine Textdatei, überschreibt sie aber beim zweiten Versuch komplett. Ist ja auch nicht Sinn der Sache.
Die function testFSO funktioniert erstmal nicht.
Ich hatte es allerdings heute schon mal mit vbScript versucht, da hat es geklappt. War aber nur zum üben.
Das mit den Cookies gefällt mir ja eigentlich auch, aber da müsste man doch für jeden Listeneintrag einen extra Cookie erstellen, oder mach ich da einen Denkfehler?
Re: Formularprüfung
Autor: habus
Datum: 17.01.2012 21:56:57
> cookies wären übrigens der wesentlich einfachere
> weg, weil der Browser sich um alles kümmert.
>
> Als test, ob WSH funktioniert, starte mal diese
> funktion in deinem Gadget, und sage, was dabei
> herauskommmt:
>
>
> function
> testFso()
> {
>
> var
> fso;
>
> try
> {
>
> fso
> = new
> ActiveXObject("Scripting.Filesystemobject");
>
> alert("Filesystemobject
> erfolgreich erzeugt");
>
> }
>
> catch(
> e ) { alert( "Filesystemobject nicht verfügbar
> n(" + e + ")" ); }
> }
Klappt! Nur der eingebaute Browser im Editor hat gezickt, mit dem richtigen IE kommt erfolgreich erzeugt!
Re: Formularprüfung
Autor: kicia
Datum: 17.01.2012 22:29:27
> getestet. Es speichert zumindest erstmal eine
> Textdatei, überschreibt sie aber beim zweiten
> Versuch komplett. Ist ja auch nicht Sinn der
> Sache.
Nicht? Gut, dann kann man aber natürlich niemals Einträge löschen. Die größe der Datei ist dann außerdem theoretisch unbegrenzt (wird immer nur größer), was die verwendung von cookies (begrenzte größe) problematisch macht.
Ich hätte die Datei komplett geladen, geändert und wieder komplett gespeichert.
Wie man hinzufügt statt zu überschreiben steht da:
http://msdn.microsoft.com/en-us/library/314cz14s(v=vs.84).aspx
(Stichwort "ForAppending")
> Die function testFSO funktioniert erstmal nicht.
Wie ich immer sage: verbanne die Formulierung "funktioniert nicht" aus Deinem Wortschatz. Damit kann keiner was anfangen. Du wirst immer Rückfragen oder gar keine Antwort bekommen.
Rückfrage: was passiert denn? Irgendwas passiert bestimmt, und wenn es eine Fehlermeldung ist.
Hast Du die funktion überhaupt aufgerufen? Du musst natürlich die Funktion irgendwo mit testFso() aufrufen.
> Ich hatte es allerdings heute schon mal mit
> vbScript versucht, da hat es geklappt.
"hat geklappt" sagt mir auch nix.
> Das mit den Cookies gefällt mir ja eigentlich
> auch, aber da müsste man doch für jeden
> Listeneintrag einen extra Cookie erstellen, oder
> mach ich da einen Denkfehler?
Du kannst beliebigen text (bis 4kB) im cookie speichern. Also auch mehrere Werte, mit irgendeinem Trennzeichen getrennt.
siehe:
- http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=cookies
- http://de.wikipedia.org/wiki/HTTP-Cookie#Cookie_nach_Netscape
Re: Formularprüfung
Autor: habus
Datum: 18.01.2012 18:33:14
> > getestet. Es speichert zumindest erstmal
> eine
> > Textdatei, überschreibt sie aber beim
> zweiten
> > Versuch komplett. Ist ja auch nicht Sinn
> der
> > Sache.
>
> Nicht? Gut, dann kann man aber natürlich niemals
> Einträge löschen. Die größe der Datei ist dann
> außerdem theoretisch unbegrenzt (wird immer nur
> größer), was die verwendung von cookies
> (begrenzte größe) problematisch macht.
Wo ist jetzt aber der Unterschied? Ein Cookie ist doch auch eine Textdatei? Kann man denn aus dem Einträge löschen? Und warum nicht aus einer anderen Textdatei? Und wie groß die wird, liegt doch am jeweiligen User, ich glaub kaum, dass sich einer 10.000 Webcamadressen speichert.
> http://msdn.microsoft.com/en-us/library/314cz14s(v=vs.84).aspx
> (Stichwort "ForAppending")
Mit dem Beispielscript hab ich mich mal näher beschäftigt. Es erstellt jetzt brav eine Textdatei mit dem angegebenen Namen und schreibt Zeile für Zeile die neuen Einträge hinzu. Das hinzufügen von Leerzeilen ist auch unterbunden.Als Zeilentrennung hab ich mal die # eingearbeitet... weiß nicht, ob das notwendig ist für spätere Schritte.
Nächster Schritt wäre dann, doppelte Einträge zu vermeiden.
***Script am Ende***
> > Die function testFSO funktioniert erstmal
> nicht.
>
> Wie ich immer sage: verbanne die Formulierung
> "funktioniert nicht" aus Deinem Wortschatz. Damit
> kann keiner was anfangen. Du wirst immer
> Rückfragen oder gar keine Antwort bekommen.
>
Dazu hatte ich gestern abend noch eine Ergänzung geschickt. Ich versuche, mich zu bessern.
<html>
<head>
<title></title>
<script type="text/javascript">
function chkFormular()
        {
        var eingabe = document.form1.camurl.value;
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var filename = "camurl.txt";
        var f = fso.OpenTextFile(filename, 8, true);
        if (!eingabe == "")
        {f.WriteLine(+eingabe+"#");}
        f.Close();
        }
</script>
</head>
<body>
<form name="form1" action="#">
<b>Webcam-Adresse:</b><br>
<input type="text" name="camurl" style="width:250px"><br><br>
<b>Zur Auswahlliste hinzufügen ?</b>
<input type="button" value="Ja" style="width:47px" onclick="chkFormular();"><br><br>
</form>
</body>
</html>
Re: Formularprüfung
Autor: kicia
Datum: 18.01.2012 19:07:57
> Ein Cookie ist doch auch eine Textdatei?
> Kann man denn aus dem Einträge löschen?
> Und warum nicht aus einer anderen Textdatei?
Ein Cookie ist was immer der Browser für richtig hält. Wenn's eine Textdatei ist, schön. Aber der Punkt ist, dass Du Dich um das Dateisystem gar nicht kümmern musst, sondern einfach das document.cookies auslesen/schreiben kannst. Es kann Dir also egal sein, ob es eine Textdatei ist oder sonstwas.
Aus Textdateien Teile löschen geht grundsätzlich ohne weiteres nicht. Wenn der Browser einen Eintrag aus dem Cookie löschen will, muss er auch die komplette Datei neu schreiben (mindestens alles ab dem zu löschenden Eintrag).
> Und wie groß die wird, liegt
> doch am jeweiligen User, ich glaub kaum, dass
> sich einer 10.000 Webcamadressen speichert.
Man würde aber vielleicht eine alte Webcamadresse löschen und eine andere hinzufügen wollen. Hinzufügen geht mit Deiner Methode, löschen aber nicht.
> Als Zeilentrennung hab ich mal die #
> eingearbeitet... weiß nicht, ob das notwendig ist
> für spätere Schritte.
Du könntest "rn" schreiben, statt "#". Das ist für Windows der übliche Zeilenumbruch. Macht aber fürs Programm keinen Unterschied. Der Vorteil wäre, dass Du die Datei mit einem Texteditor besser anschauen kannst.
> Dazu hatte ich gestern abend noch eine Ergänzung
> geschickt.
Ja, hatte ich später gesehen
Ich warne lieber nochmal vor späteren Problemen, wenn Du Schreibschutz und Zugriffsrechte usw. beim Speichern nicht berücksichtigst.
Re: Formularprüfung
Autor: habus
Datum: 18.01.2012 19:26:33
> > Ein Cookie ist doch auch eine Textdatei?
> > Kann man denn aus dem Einträge löschen?
> > Und warum nicht aus einer anderen
> Textdatei?
>
> Ein Cookie ist was immer der Browser für richtig
> hält. Wenn's eine Textdatei ist, schön. Aber der
> Punkt ist, dass Du Dich um das Dateisystem gar
> nicht kümmern musst, sondern einfach das
> document.cookies auslesen/schreiben kannst. Es
> kann Dir also egal sein, ob es eine Textdatei ist
> oder sonstwas.
Sowas macht mich aber nervös, wenn ich nicht weiß, wo und in welcher Form etwas gespeichert wird.
>
> Man würde aber vielleicht eine alte Webcamadresse
> löschen und eine andere hinzufügen wollen.
> Hinzufügen geht mit Deiner Methode, löschen aber
> nicht.
Jau, aber wo ist der Unterschied zum Cookie? Hab ich immer noch nicht kapiert. Und bei einer Textdatei weiß ich wenigstens, wo sie gespeichert wird und kann im Notfall per Hand editieren.
>
> Du könntest "rn" schreiben, statt "#". Das ist
> für Windows der übliche Zeilenumbruch. Macht aber
> fürs Programm keinen Unterschied. Der Vorteil
> wäre, dass Du die Datei mit einem Texteditor
> besser anschauen kannst.
Im Editor wirds auch ohne alles mit Zeilenumbruch dargestellt.
>
> Ich warne lieber nochmal vor späteren Problemen,
> wenn Du Schreibschutz und Zugriffsrechte usw.
> beim Speichern nicht berücksichtigst.
Gadgets werden automatisch immer im selben Ordner installiert. Und wenn ich die Textdatei gleich in die Installation einbinde, seh ich da keine Probleme.
Re: Formularprüfung
Autor: kicia
Datum: 18.01.2012 20:11:21
> > Man würde aber vielleicht eine alte
> Webcamadresse
> > löschen und eine andere hinzufügen wollen.
> > Hinzufügen geht mit Deiner Methode, löschen
> aber
> > nicht.
>
> Jau, aber wo ist der Unterschied zum Cookie? Hab
> ich immer noch nicht kapiert.
Methode A:
hinzufügen, niemals Einträge löschen oder ändern.
Methode B:
Datei komplett laden, Einträge bearbeiten (hinzufügen/löschen/ändern), Datei komplett speichern
Du machst A, der Browser (also cookies) macht B.
Re: Formularprüfung
Autor: habus
Datum: 19.01.2012 14:44:55
Schau mal, was ich heute gebastelt hab..., ohen Cookies, ohne zusätzliche Textdatei.
Beim Frühstück kam mir die -geniale?- Idee, wenn ich mit fsObject in eine Textdatei schreiben kann, dann kann ich auch in eine HTML-Datei schreiben. Und siehe da, es funktioniert! Ich weiß, Du kannst das Wort nicht ausstehen, kicia...;-)
Allerdings schreibt wer die neuen Einträge ganz unten in die html, und klappen tut es auch nur, wenn ich den schließenden </select> weg lasse.
Das wird Dir wieder Sorgenfalten auf die Stirn meißeln. Schöner wäre es natürlich, die Einträge an der richtigen Stelle zu schreiben. Hab es schon mit einem DIV-Container versucht, in den ich die Funktion Speichern und die Auswahlliste gepackt habe, aber das ändert gar nix.
Vielleicht hast Du ja noch ne Idee...
Code:
<html>
<head>
<title></title>
<script type="text/javascript">
function chkFormular ()
        {
        var eingabe = document.form1.camurl.value;
        var liste = document.form1.sel;
        var vorhanden = false;
        for (var i = 0; i < liste.length; i++)
                {
                if (liste.options[i].value == eingabe)
                        {
                        vorhanden = true;
                        }
                }
                if (!vorhanden)               
       
        speichern()
        }
function speichern()
        {
        var eingabe = document.form1.camurl.value;
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var filename = "Unbenannt2.html";
        var f = fso.OpenTextFile(filename, 8, true);
        f.WriteLine("<option value="+eingabe+">"+eingabe+"</option>");
        f.Close();
        }
</script>
</head>
<body>
<form name="form1" action="#">
<b>Webcam-Adresse:</b><br>
<input type="text" name="camurl" style="width:250px"><br><br>
<b>Zur Auswahlliste hinzufügen ?</b>
<input type="button" value="Ja" style="width:47px" onclick="chkFormular(); window.location.reload()"><br><br>
<select name="sel" style="width:250px" onchange="this.form.camurl.value=this.options[this.selectedIndex].value;">;
<option value="">Auswahlliste</option>
<option value="http://www.thueringer-webcams.de/kunden/mdr/weimar/livebild-pal.jpg">Weimar, Theaterplatz</option>
<!-- </select>-->
</form>
</body>
</html>
<option value=habus>habus</option>
<option value=kicia>kicia</option>
Die beiden untersten Zeilen sind auf diese Weise erzeugt.
Gruß Habus
Re: Formularprüfung
Autor: kicia
Datum: 19.01.2012 15:49:19
> Und siehe da, es funktioniert! Ich weiß, Du kannst das Wort nicht ausstehen, kicia...;-)
:P
> ...
> </form>
> </body>
> </html>
> <option value=habus>habus</option>
> <option value=kicia>kicia</option>
Das geht leider so nicht, das ist weder gültig noch wohlgeformt, das ist einfach falsch. Du kannst Dich nicht darauf verlassen, dass es morgen auch noch funktioniert oder bei jemand anderem.
Wenn Du Dich dazu entschlossen hast, das Filesystemobject zu verwenden, und jegliche Prüfung auf zugänglichkeit der Dateien wegzulassen, dann ist laden überhaupt kein Problem mehr:
            var filename = "c:/temp/testfile.txt";
            document.getElementsByTagName("select")[0].innerHTML = laden();
            function laden( fn )
            {
                var fso = new ActiveXObject("Scripting.Filesystemobject");
                var out = "";
                var file = fso.OpenTextFile( fn, 1 );
                if( file.AtEndOfStream ) alert("ERROR: Die Datei ist leer"); else out = file.ReadAll();
                file.close();
                return out;
            }
Wobei es besser wäre sich gedanken über ein geeignetes Format für die Daten zu machen und nur diese zu speichern/laden, daraus dann HTML Elemente generieren.
zB. Daten:
webadresseA|BezeichnerA
webadresseB|BezeichnerB
...
zB. änderungen an der laden funktion:
    ....
    file.close();
    out = out.split("rn")
    return out;
}
zB. generieren:
for( i = 0; i < out.length; i++ ){
    out[i] = out[i].split("|");
    // makeOption:
    out[i] = "<option value='" + out[i][0] + "'>" + out[i][1] + "</option>";
}
deinSelect.innerHTML = out.join("");
Wobei für makeOption wiederum besser wäre, DOM methoden zu verweden.
Re: Formularprüfung
Autor: habus
Datum: 19.01.2012 17:31:54
Ich hab grad folgenden Gedankengang: Die options in einer separaten html-Datei zu speichern (getestet, klappt) und die dann an die richtige Stelle zu importieren.....
Re: Formularprüfung
Autor: habus
Datum: 20.01.2012 11:35:42
Moin!
Hab das mal nachgebaut, was Du mir gestern geschickt hast. Ich bekomme immer eine Fehlermeldung: Zeile 15 (siehe Pfeil -->)ungültiger Prozeduraufruf oder ungültiges Argument, und die Liste bleibt leer.
Und was macht die erste Variable var filename=.
filename taucht nirgendwo wieder auf???
Gruß Habus
<html>
<head>
<title></title>
<script type="text/javascript">
var filename = "camurls.txt";
            document.getElementsByTagName("sel")[0].innerHTML = laden();
            function laden( fn )
            {
                var fso = new ActiveXObject("Scripting.Filesystemobject");
                var out = "";
--->                var file = fso.OpenTextFile( fn, 1 );
                if( file.AtEndOfStream ) {alert("ERROR: Die Datei ist leer");} else {out = file.ReadAll();
                file.close();
                return out;
            }}
</script>
</head>
<body>
<form name="form1" action="#">
<b>Webcam-Adresse:</b><br>
<input type="text" name="camurl" style="width:250px"><br><br>
<b>Zur Auswahlliste hinzufügen ?</b>
<input type="button" value="Ja" style="width:47px" onclick="laden()";><br><br>
<select name="sel" style="width:250px" onchange="this.form.camurl.value=this.options[this.selectedIndex].value;">;
</select>
</form>
</body>
</html>
Re: Formularprüfung
Autor: kicia
Datum: 20.01.2012 13:48:36
> Fehlermeldung: Zeile 15 (siehe Pfeil
> -->)ungültiger Prozeduraufruf oder ungültiges
>
> Und was macht die erste Variable var filename=.
> filename taucht nirgendwo wieder auf???
Ach, verdammt, es muss natürlich heissen:
...[0].innerHTML = laden( filename );
Re: Formularprüfung
Autor: habus
Datum: 20.01.2012 14:16:27
Hm, jetzt kommt: Für die Eigenschaft "innerHTML" kann kein Wert festgelegt werden. Das Objekt ist null oder undefiniert.
Re: Formularprüfung
Autor: kicia
Datum: 20.01.2012 17:25:04
> Hm, jetzt kommt: Für die Eigenschaft "innerHTML"
> kann kein Wert festgelegt werden. Das Objekt ist
> null oder undefiniert.
hbmf.
es muss getElementsByName sein, nicht ..TagName.
sorry, komme nicht dazu, den code zu testen.
übrigens, wollt ich schon gefragt haben: welchen editor benutzt du? Nur damit ichs weiss, falls es noch relevant wird.
Re: Formularprüfung
Autor: habus
Datum: 20.01.2012 17:37:46
> > Hm, jetzt kommt: Für die Eigenschaft
> "innerHTML"
> > kann kein Wert festgelegt werden. Das Objekt
> ist
> > null oder undefiniert.
>
> hbmf.
Was heißt jetzt hbmf... grübel... Hau bitte meine Frau? grins.
> es muss getElementsByName sein, nicht ..TagName.
Leider keine Änderung...
> übrigens, wollt ich schon gefragt haben: welchen
> editor benutzt du? Nur damit ichs weiss, falls es
> noch relevant wird.
Free JavaScript Editor 4.7
http://www.yaldex.com/Free_JavaScript_Editor.htm
Und vielen Dank für Deine Geduld mit mir. Ich würde ja mal ein Bier ausgeben, aber das threaded sich so schlecht...
dateien laden und schreiben
Autor: kicia
Datum: 20.01.2012 19:16:27
> hbmf.
war keine abkürzung, sondern ein laut der unzufriedenheit.
> es muss getElementsByName sein, nicht ..TagName.
> sorry, komme nicht dazu, den code zu testen.
äh, moment... ich komm mit den codes in den vergangenen posts durcheinander.
getElementByTagName war glaub ich doch richtig...
poste nochmal den ganzen code, damit ich weiss, was du jetzt hast.
Mal sehen, wie dieses Forum sich verhält, wenn man so lange threads hat. Wir hätten nachdem das mit dem Formular geklärt war, einen neuen Thread aufmachen sollen.
Re: dateien laden und schreiben
Autor: habus
Datum: 20.01.2012 20:52:53
Da isser:
<html>
<head>
<title></title>
<script type="text/javascript">
var filename = "c:/temp/testfile.txt";
            document.getElementsByName("select")[0].innerHTML = laden(filename);
            function laden( fn )
            {
                var fso = new ActiveXObject("Scripting.Filesystemobject");
                var out = "";
                var file = fso.OpenTextFile( fn, 1 );
                if( file.AtEndOfStream ) alert("ERROR: Die Datei ist leer"); else out = file.ReadAll();
                file.close();
                return out;
            }
</script>
</head>
<body>
<form name="form1" action="#">
<b>Webcam-Adresse:</b><br>
<input type="text" name="camurl" style="width:250px"><br><br>
<b>Zur Auswahlliste hinzufügen ?</b>
<input type="button" value="Ja" style="width:47px" onclick="laden()"><br><br>
<select name="select" style="width:250px" onchange="this.form.camurl.value=this.options[this.selectedIndex].value;">;
</select>
</form>
</body>
</html>
Re: dateien laden und schreiben
Autor: kicia
Datum: 20.01.2012 22:26:34
achso, alles klar, der typische fehler:
das select existiert noch nicht, wenn der code ausgeführt wird.
Der ganze code muss also "onload" oder "onclick" ausgeführt werden:
zB:
<script type="text/javascript">
    window.onload = init;
    function init()
    {
      ...
    }
</script>
Dein onclick="laden()" geht aber so nicht (weil die funktion laden(fn) tatsächlich eine funktion ist und nicht nur eine subroutine, dh. einen parameter erwartet und ein ergebnis zurückliefert.)
Da gäbs jetzt viele Möglichkeiten. Wär mir jetzt zu viel darauf einzugehen.
Re: dateien laden und schreiben
Autor: habus
Datum: 20.01.2012 23:43:56
Prima, keine Fehlermeldung mehr! Auch der Alarm kommt bei einer leeren Textdatei. Nur die Liste ist störrisch, die bleibt tapfer immer leer, auch wenn die Textdatei einen Inhalt hat.
>
> Dein onclick="laden()" geht aber so nicht (weil
> die funktion laden(fn) tatsächlich eine funktion
> ist und nicht nur eine subroutine, dh. einen
> parameter erwartet und ein ergebnis
> zurückliefert.)
Das war auch nur testweise, der Button hat ja eigentlich die Aufgabe, neue Einträge zuzufügen.
Re: Formularprüfung
Autor: habus
Datum: 24.01.2012 15:29:57
> Wobei es besser wäre sich gedanken über ein
> geeignetes Format für die Daten zu machen und nur
> diese zu speichern/laden, daraus dann HTML
> Elemente generieren.
Hab ich doch glatt gemacht.
> zB. Daten:
> webadresseA|BezeichnerA
> webadresseB|BezeichnerB
> ...
Die Daten werden jetzt in diesem Format in der Datei camurls.txt gespeichert.
Jetzt scheitere ich aber schon an der Prüfung auf doppelte Einträge. Wenn ich eine Datei mit dem Eintrag 1|2 habe und über das Formular 2|1 eintrage, dann nimmt er beim nächsten Aufruf zwar nichts, was mit 1| anfängt, aber zum Beispiel 123 schreibt er rein. Er scheint nur das erste Zeichen zu prüfen... Kannst Du bitte nochmal rüber schauen?
<html>
<head>
<title></title>
<script type="text/javascript">
window.onload = init;
function init()
            {
            filename = "camurls.txt";
            document.getElementsByName("select")[0].innerHTML = laden(filename);
            function laden (fn)
                {
                fso = new ActiveXObject("Scripting.Filesystemobject");
                var file = fso.OpenTextFile( fn, 1 );               
                out = file.ReadAll();
                file.close();
                out = out.split("|"); alert(out);
                return out;
                }
            } 
function chkFormular()
            {
            var eingabe1 = document.form1.camurl.value;
            var eingabe2 = document.form1.camname.value;
            var file = fso.OpenTextFile(filename, 8);
           
            var vorhanden = false;
            for (var i = 0; i < out[0].length; i++)
       
                {
                if (eingabe1 === "")
                {alert("leer!");}
               
                if (eingabe2 === "")
                {alert("auch leer!");
                return false;}
                if (out[0] == eingabe1)
                        {
                        vorhanden = true; alert("vorhanden");
                        }
               
                if (!vorhanden)
            {
            file.writeline (eingabe1+"|"+ eingabe2);
            }
            file.close();
         
            }}
       
       
</script>
</head>
<body>
<form name="form1" action="#">
<b>Webcam-Adresse:</b><br>
<input type="text" name="camurl" style="width:250px"><br><br>
<b>Webcam-Name:</b><br>
<input type="text" name="camname" style="width:250px">
<b><h5>Pflichtfelder!</h5></b>
<b><h6>**************************************************</h6></b>
<b>Zur Auswahlliste hinzufügen ?</b>
<input type="button" value="Ja" style="width:47px" onclick="chkFormular();"><br><br>
<select name="select" style="width:250px" onchange="this.form.camurl.value=this.options[this.selectedIndex].value; this.form.camname.value=this.options[this.selectedIndex].text;">;
<option value="">Auswahlliste</option>
<option value="http://www.thueringer-webcams.de/kunden/mdr/weimar/livebild-pal.jpg">Weimar, Theaterplatz</option>
</select>
<b><h6>**************************************************</h6></b>
<b>Aktualisierung in Sekunden:</b>
<br>
<input type="text" id="interval" value="">
</form>
<img src="habus.png" alt="" width="25" height="44"><font color="windowtext" size="1" face="Arial">Webcam 1.0 © 2012 by Habus</font>
</body>
</html>
Re: Formularprüfung
Autor: kicia
Datum: 25.01.2012 08:47:57
> Hab ich doch glatt gemacht.
cool :)
> out = out.split("|");
> alert(out);
ändere das alert mal zu alert( out.join(" / ") ), dann wird das problem glaub ich deutlich.
bei Deinem Code wird:
"webadresseA|BezeichnerA\r\nwebadresseB|BezeichnerB"
zu:
[ "webadresseA", "BezeichnerA\r\nwebadresseB|BezeichnerB" ]
> for (var i = 0; i < out[0].length; i++)
> if ( out[0] == eingabe1 ) ...
out[0] ist und bleibt immer "webadresseA".
> if (eingabe1 === "") {alert("leer!");}
> if (eingabe2 === "") {alert("auch leer!");
Das muss nicht innerhalb der Schleife stehen.
Re: Formularprüfung
Autor: habus
Datum: 25.01.2012 11:05:12
> ändere das alert mal zu alert( out.join(" / ") ),
> dann wird das problem glaub ich deutlich.
>
> bei Deinem Code wird:
>
> "webadresseA|BezeichnerArnwebadresseB|BezeichnerB"
>
> zu:
> [ "webadresseA",
> "BezeichnerArnwebadresseB|BezeichnerB" ]
Sorry, aber ich kapier das grad echt nicht...
Mit alert(out) bekomme ich webadresseA,BezeichnerA angezeigt, mit alert(out.join(" / ")) wird daraus webadresseA / BezeichnerA. Es müsste aber heißen webadresseA|BezeichnerA, so richtig?
Und wie krieg ich das gebacken?
Re: Formularprüfung
Autor: habus
Datum: 25.01.2012 14:41:01
> > ändere das alert mal zu alert( out.join(" /
> ") ),
> > dann wird das problem glaub ich deutlich.
> >
> > bei Deinem Code wird:
> >
> >
> "webadresseA|BezeichnerArnwebadresseB|BezeichnerB"
> >
> > zu:
> > [ "webadresseA",
> > "BezeichnerArnwebadresseB|BezeichnerB" ]
>
> Sorry, aber ich kapier das grad echt nicht...
> Mit alert(out) bekomme ich
> webadresseA,BezeichnerA angezeigt, mit
> alert(out.join(" / ")) wird daraus webadresseA /
> BezeichnerA. Es müsste aber heißen
> webadresseA|BezeichnerA, so richtig?
>
> Und wie krieg ich das gebacken?
Edit: Mir ist auch grad aufgefallen, dass das ganze im IE überhaupt nicht funzt. Der zeigt das Formular an und das wars, es kommt nicht mal der erste alert, auch keine Fehlermeldung. Fehlerkonsole vom FF sagt: Zeile 16 ActiveXObject is not defined.
Re: Formularprüfung
Autor: kicia
Datum: 25.01.2012 18:19:42
> > > bei Deinem Code wird:
> >
> "webadresseA|BezeichnerArnwebadresseB|BezeichnerB"
> > > zu:
> > > [ "webadresseA", "BezeichnerArnwebadresseB|BezeichnerB" ]
> >
> > Mit alert(out) bekomme ich
> > webadresseA,BezeichnerA angezeigt
Das würde (wie ich das sehe) bedeuten, dass in der txt datei nur eine zeile steht. Sonst müsste das Ergebnis so sein, wie ich geschrieben habe.
> > , mit alert(out.join(" / ")) wird daraus
> > webadresseA / BezeichnerA. Es müsste aber heißen
> > webadresseA|BezeichnerA, so richtig?
Nein...
> > Und wie krieg ich das gebacken?
...Du musst Arrays verstehen. Und Schleifen. Das ist absolutes Basiswissen. Sonst bliebe nur, dass ich das komplett für Dich schreibe.
Du müsstest einiges ändern, aber es gäbe verschiedene Möglichkeiten, was man ändern muss und wie.
zB. sollte vermutlich out[0].length geändert werden zu
out.length, und if(out[0] == eingabe1) zu if( out[i][0] == eingabe1). Das hängt aber davon ab, wie die anderen Fehler behoben werden. ZB fehlt vermutlich eine ganze Schleife.
Reduzier den Code wieder bis zu einem Punkt, wo sich alles so verhalten hatte, wie Du es wolltest, und arbeite Dich dann wieder mit kleinen Schritten voran, während Du immer schön die Ergebnisse und Fehler im Auge hast.
Verwende alert(), um zu schauen, wie weit das Script kommt. Wenn gar nichts geht, wieder reduzieren, bis wieder etwas geht.
> Edit: Mir ist auch grad aufgefallen, dass das
> ganze im IE überhaupt nicht funzt. Der zeigt das
> Formular an und das wars, es kommt nicht mal der
> erste alert, auch keine Fehlermeldung.
> Fehlerkonsole vom FF sagt: Zeile 16 ActiveXObject
> is not defined.
Vergiss Firefox. Du entwickelst nicht für das WWW, sondern für Windows. Was die WWW Browser sagen, zählt nicht.
Vergiss auch etwaige Vorschauen in Deinem Editor.
Nur was Dein Gadget tut, zählt.
Im IE findest Du Fehlermeldungen links unten in der Statuszeile.
Re: Formularprüfung
Autor: habus
Datum: 25.01.2012 19:33:18
...Es müsste
> aber heißen
> > > webadresseA|BezeichnerA, so richtig?
>
> Nein...
Das ist jetzt aber ne Antwort a'la funktioniert nicht...;-)
>
> > > Und wie krieg ich das gebacken?
>
> ...Du musst Arrays verstehen. Und Schleifen. Das
> ist absolutes Basiswissen. Sonst bliebe nur, dass
> ich das komplett für Dich schreibe.
Nö, ich hab ja auch meinen Ehrgeiz... Aber ein konkreter Hinweis auf vorhandene Fehler wäre schon hilfreich, damit ich wenigstens weiß, wonach ich suchen muss.
> Du müsstest einiges ändern, aber es gäbe
> verschiedene Möglichkeiten, was man ändern muss
> und wie.
> zB. sollte vermutlich out[0].length geändert
> werden zu
> out.length, und if(out[0] == eingabe1) zu if(
> out[i][0] == eingabe1). Das hängt aber davon ab,
> wie die anderen Fehler behoben werden. ZB fehlt
> vermutlich eine ganze Schleife.
>
> Reduzier den Code wieder bis zu einem Punkt, wo
> sich alles so verhalten hatte, wie Du es
> wolltest, und arbeite Dich dann wieder mit
> kleinen Schritten voran, während Du immer schön
> die Ergebnisse und Fehler im Auge hast.
> Verwende alert(), um zu schauen, wie weit das
> Script kommt. Wenn gar nichts geht, wieder
> reduzieren, bis wieder etwas geht.
Im Moment bin ja ja ein einer Stelle, wo es so funzt, wie ich denke, bis auf die Formularprüfung, die Anzeige der Daten im Formular und die Funktion im IE/Gadget.
> Nur was Dein Gadget tut, zählt.
Und das tut auch nichts, es basiert ja auf dem IE, in meinem Fall IE9.
> Im IE findest Du Fehlermeldungen links unten in
> der Statuszeile.
Beim IE9 nicht mehr. Hab aber die Entwicklertools aufgerufen. Da ist keine Fehlermeldung.
Re: Formularprüfung
Autor: reporter
Datum: 26.01.2012 14:17:24
Hallo,
> Zeile 16 ActiveXObject is not defined.
Der Firefox hat ungwollt das richtige gepostet ;-).
function chkFormular()
{
    var eingabe1 = document.form1.camurl.value;
            var eingabe2 = document.form1.camname.value;
            var file = fso.OpenTextFile(filename, 8);
...
}
und zwar ist die Variable 'fso' weder deklarariert noch mit Inhalt gefüllt. Du mußt also vorher noch 'fso = new ActiveXObject("Scripting.Filesystemobject");
' einfügen.
Re: Formularprüfung
Autor: habus
Datum: 26.01.2012 16:55:18
> Hallo,
>
> > Zeile 16 ActiveXObject is not defined.
>
> Der Firefox hat ungwollt das richtige gepostet
> ;-).
>
> function chkFormular()
> {
> var eingabe1 =
> document.form1.camurl.value;
>
> var
> eingabe2 = document.form1.camname.value;
>
> var
> file = fso.OpenTextFile(filename, 8);
> ...
> }
>
> und zwar ist die Variable 'fso' weder
> deklarariert noch mit Inhalt gefüllt. Du mußt
> also vorher noch 'fso = new
> ActiveXObject("Scripting.Filesystemobject");
> ' einfügen.
>
Aber Zeile 16... da steht genau das drin, verwirrt guck.
fso = new ActiveXObject("Scripting.FileSystemObject");
Re: Formularprüfung
Autor: reporter
Datum: 26.01.2012 21:19:15
basierend auf http://www.selfhtml.de/forum/zeigebeitrag_2_134873_134783_0.php steht diese Anweisung in der init-Funktion, jedoch nicht in der chkFormular Funktion. Daher ist diese nur in der init-Methode vorhanden.
Wenn du jedoch die Dekllration direkt unter dem script-Tag machst, definierst du sie global und steht dann der ganzen Seite zur Verfügung.
Re: Formularprüfung
Autor: habus
Datum: 26.01.2012 21:38:38
> basierend auf
> http://www.selfhtml.de/forum/zeigebeitrag_2_134873_134783_0.php
> steht diese Anweisung in der init-Funktion,
> jedoch nicht in der chkFormular Funktion. Daher
> ist diese nur in der init-Methode vorhanden.
> Wenn du jedoch die Dekllration direkt unter dem
> script-Tag machst, definierst du sie global und
> steht dann der ganzen Seite zur Verfügung.
Da steht sie jetzt, in Zeile 7, einzige Änderung: FF bejammert jetzt Zeile 7... und IE is immer noch bockig. Ich nehm erstmal meine Herztropfen...;-))
Re: Formularprüfung
Autor: kicia
Datum: 27.01.2012 09:02:31
> > Nein...
> Das ist jetzt aber ne Antwort a'la funktioniert
> nicht...;-)
Darum die "...", es geht darunter weiter.
> Aber ein konkreter Hinweis auf vorhandene Fehler wäre
> schon hilfreich, damit ich wenigstens weiß,
> wonach ich suchen muss.
Hab ich gegeben. Stichwort "out[0]...", "ZB fehlt vermutlich eine ganze Schleife."
Deine Daten sind zweidimensional und Du versuchst sie in eine eindimensionales Array zu laden.
Wie Du jetzt weiter machen willst, weiss ich nicht. Darum musst Du Arrays verstehen, damit Du Dich selbst entscheiden kannst. (Ich weiss nicht, inwiefern Du for-schleifen verstanden hast)
Ich würde das ganze ja grundsätzlich anders machen, nämlich die Daten komplett in ein Array schreiben, Eingabe/Ausgabe/Laden/Speichern davon trennen und für den Datenaustausch zwischen diesen Komponenten definierte "Schnittstellen" verwenden.
Das möchtest Du aber nicht, das hast Du schon deutlich gemacht.
Es muss wahrscheinlich noch sehr viel geändert werden, zB. fehlt wie gesagt (vermutlich) eine Schleife in Deinem Vergleich mit der Eingabe, ausserdem muss irgendwo zwischen Laden und Verwendung des Arrays auch noch eine Schleife dazu, um die zweite Dimension hinzuzufügen, vielleicht in die Laden-Funktion.
Die Zeile
....innerHTML = laden(filename);
Ist so auch nicht mehr richtig, denn Deine Daten sind kein HTML mehr.
Du brauchst bestimmt nochmal mindestens 10 Zeilen code für eine Funktion wie zB. createMyOptionElements().
Darin könntest Du zwar wieder innerHTML verwenden, ich würde aber die DOM Methoden (createElement, appendChild, ...) empfehlen.
 
> > ...wieder reduzieren, bis wieder etwas geht.
>
> Im Moment bin ja ja ein einer Stelle, wo es so
> funzt, wie ich denke, bis auf die
> Formularprüfung, die Anzeige der Daten im
> Formular und die Funktion im IE/Gadget.
gut, dann noch weiter reduzieren und alert verwenden.
bezogen auf http://www.selfhtml.de/forum/zeigebeitrag_2_134885_134783_0.php :
> FF bejammert jetzt Zeile 7
nochmal: vergiss Firefox. Der hat hiermit überhaupt nichts zu tun. Es kann und wird dort nicht funktionieren.
Re: Formularprüfung
Autor: reporter
Datum: 27.01.2012 10:41:52
hallo,
Du den obigen Fehler dreimal gemacht:
1. die Sache mit der Zeile 'fso = new ActiveXObject("Scripting.Filesystemobject");'
Dies hast du korrgiert.
Hinzu kommen jetzt die Zeilen:
2. 'var file = fso.OpenTextFile(filename, 8);'
Die Variable "filename" ist für die Funktion 'chkFormular()' nicht defeniert.
3. 'if (out[0] == eingabe1)' bzw. 'for (var i = 0; i < out[0].length; i++)'
Die Variable "out", hier meinst du das Array, ist für die Funktion 'chkFormular()' nicht definiert.
Und das der FF jetzt in Zeile 7 meckert liegt daran, das der FF, Chrome und Safari ActiveX-Objekte einfach nicht unterstützt. Auch solltest in deinem Internetexplorer das Anzeigen von Skriptfehler aktivieren. Verwende dazu Google um herauszufinden, wie das gemacht wird.
Re: Formularprüfung
Autor: habus
Datum: 27.01.2012 13:40:08
Männers, ihr seid Klasse!
Und der IE ist ein Vollpfosten... Jetzt hab ich die Anzeige von Scriptfehlern aktiviert und was sagt er: Datei nicht gefunden! Aber er zeigt sie natürlich an, pfff.
So, ich folge jetzt mal kicias Rat und fange nochmal von vorn an. Und da ist schon das erste Problem.
Ich habe also die Textdatei in diesem Format:
Adresse1|Name1
Adresse2|Name2
Adresse3|Name3
Adresse4|Name4
Das Script:
<html>
<head>
<title></title>
<script type="text/javascript">
    function laden()
    {
        fso = new ActiveXObject("Scripting.FileSystemObject");
        var camurls = fso.OpenTextFile("D:\Dropbox\Documents\Gadgettest\camurls.txt", 1, true);  //Anpassen!!
        out = camurls.ReadAll();
        for (var i = 0; i < out.length; i++)
        out2 = out.split("|")
       
        alert(out2[1]);
        return;
    }
</script>
</head>
<body onload="laden();">
</body>
</html>
Mit "alert(out2[0]);" bekomme ich das Ergebnis "Adresse1".
Mit "alert(out2[1]);" bekomme ich das Ergebnis
"Name1
Adresse2"
Ich brauche aber mit alert(out2[0]) die Ausgabe
Adresse1
Adresse2
.... und analog dazu mit alert(out2[1])
Name1
Name2...
Wo liegt hier mein Fehler?
Gruß habus
Re: Formularprüfung
Autor: reporter
Datum: 27.01.2012 15:11:00
Hallo,
der Fehler liegt in deiner Denkweise. Mache es doch so:
- Defeniere ein Objekt welches als Attribute die Adresse und den Namen hat. Wie das geht siehe hier: http://de.selfhtml.org/javascript/sprache/objekte.htm#eigene .
- Lese jede Zeile einzelnd aus (was du ja schon kannst).
- Mit split() teilst du jede Zeile in die zwei Teile auf (was du ja schon kannst)
- Lege für jede Zeile ein neues Objekt an und befülle die beiden Attribute (siehe bereits erwähnten Link).
- Jedes gefüllte Objekt legst du in einem Array ab. Wie es geht siehe hier: http://de.selfhtml.org/javascript/objekte/array.htm#push .
Damit hast du eigentlich schon deine gewünschte "Formatierung".
Um jetzt deine Auswahlliste zu füllen brauchst du nur noch das Array vom ersten bis zum letzten Elemente durchlaufen und die Objektattribute dem Optiontag zuweisen. Heißt: Das Objektattribut, welches die Adresse enthält wird dem Value-Attribut von <option> zugewiesen.
Das Objektattribut, welches den Namen enthält, ist der sichtbare Name des Eintrages.
Re: Formularprüfung
Autor: habus
Datum: 27.01.2012 16:11:02
Gottogott... schwitz!
Bevor ich mich jetzt weiter verirre, meinst Du das so?
function laden(Adresse, Name)
    {
        this.Adresse = Adresse;
        this.Name = Name;
        fso = new ActiveXObject("Scripting.FileSystemObject");
        var camurls = fso.OpenTextFile("D:\Dropbox\Documents\Gadgettest\camurls.txt", 1, true);  //Anpassen!!
        out = camurls.ReadAll();
        for (var i = 0; i < out.length; i++)
        out2 = out.split("|")
       
        alert(out2[1]);
        return;
    }
Re: Formularprüfung
Autor: reporter
Datum: 29.01.2012 21:35:09
Hallo,
ich glaube du hast dich nicht genügend mit meinem Vorschlag und den gesendeten Links auseinander gesetzt. Bevor alles in die falsche Richtung läuft hier mein Kode:
<script type="text/javascript">
function meineWebkamera(kameraAdresse, kamaraName)
{
  this.url = kameraAdresse;
  this.name = kamaraName; 
}
filename = "camurls.txt";
fso = fso = new ActiveXObject("Scripting.Filesystemobject");
kammeraSammlung = new Array();
function init()
{
  selectList = document.getElementsByName("select")[0];
  var file = fso.OpenTextFile( filename, 1 );               
  while (!file.AtEndOfStream)
  {
    var splitArray = f.ReadLine().split("|");
    var kamaraData = new meineWebkamera (splitArray[0],splitArray[1]);
    kammeraSammlung.push(kamaraData);
  }
  file.close();
  for (index = 0; index < kammeraSammlung.length; index++)
  {
    arrayElement = kammeraSammlung[indesx];
    neuerEintrag = new Option(arrayLElement.url, arrayElement.name, false, false);
    selectList.options[selectList.options.length] = neuerEintrag;
  }
} 
function chkFormular()
{
    var eingabe1 = document.form1.camurl.value;
    var eingabe2 = document.form1.camname.value;
    //??? Keine Ahnung was du her mit dem Fileobjekt tun möchtest.
}
window.onload = init;     
</script>
Re: Formularprüfung
Autor: habus
Datum: 30.01.2012 16:58:13
Hallo,
Ich habe Fertig!!! Juhuuuuu!!!
Hätte ich im Leben nicht ohne Euch geschafft. Ein gaaanz fettes Dankeschön Euch beiden für die viele Geduld, wobei die bei reporter wohl gestern zu Ende war;-)!
Nu habt ihr mich endlich vom Schreibtisch...:-))
Werde das Gadget heute noch zum Betatest rausgeben in "meinem Forum". Wenn ihr wollt und das hier erlaubt ist, poste ich einen Link, wobei kicia ja leider nicht testen kann.
Hat mir Spaß gemacht mit Euch!
Gruß Bernd
Re: Formularprüfung
Autor: reporter
Datum: 31.01.2012 10:25:27
Hallo,
> Werde das Gadget heute noch zum Betatest
> rausgeben in "meinem Forum". Wenn ihr wollt und
> das hier erlaubt ist, poste ich einen Link, wobei
> kicia ja leider nicht testen kann.
Dies kannst ruhig machen. Schließlich wollen wir auch mal dein Kunstwerk in der Gesamtheit sein.
Re: Formularprüfung
Autor: habus
Datum: 31.01.2012 10:39:49
> Dies kannst ruhig machen. Schließlich wollen wir
> auch mal dein Kunstwerk in der Gesamtheit sein.
http://www.sat-ulc.eu/showthread.php?t=425343&page=31
Ab Beitrag 617.
Nicht wundern, ist ein OT-Thread, nennt sich Club der alten Säcke. Es gibt auch noch Threads, wo was Sinnvolles drinsteht...
Wahrscheinlich müsst ihr Euch anmelden.
Gruß
Re: Formularprüfung
Autor: habus
Datum: 01.02.2012 17:31:03
Hallo,
keine Rückmeldung? Schluchtz...
Inzwischen ist Beta 2 draußen, jetzt scheint es perfekt zu funktionieren. Jedenfalls bei mir.
Gruß Habus
|