 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
04.01.2006, 09:02
|
#1
|
|
TP-Junior
Registriert seit: Jan 2006
Ort: Leverkusen
|
Suche unter JS - While-Schleifenproblem
Hallöchen. Mein erster Eintrag hier ins Forum am zweiten Tag der Beschäftigung mit JavaScript  - also seid bitte vorsichtig mit mir!
Es geht gar nicht darum, dass das JavaScript oder die Methode unten schlecht ist, auch nicht darum, dass bei mehrmaliger Wortsuche verschiedene URLs eventuell zweimal ausgegeben werden würden, sondern erstmal nur um das Problem überhaupt nach zwei Wörtern zu suchen. Ich hab keine Ahnung, was da los ist.
Also, es ist ne Suchfunktion und das eingegebene Wort wird mit den einzelnen Wörtern aus dem "Text"-Array verglichen. Das funktioniert auch so weit.
Nur ist nach der Suche einfach finito und die Aktionen nach der While-Schleife der Vergleichaktion (z.B. das Document-Write) werden einfach nicht durchgeführt. Wäre super, wenn ihr mir helfen könntet!
Hier das Skript (sogar kommentiert...  ):
Code:
<html>
<head>
<script type="text/javascript">
text= new Array("Willkommen TobWoerk Tobias Bereiche Werke Musik Film Foto Gedichte Geschichten;","Beyond Days
Benedikt Tobias Locations DVD Making Of MakingOf Trailer;");
url = new Array("http://www.xyz.de.vu","http://www.beyond-days.de.vu");
beschreibung = new Array("TobWoerk","Beyond Days");
function aufrufen(suchwort)
{
a=0; //array zähler
gcounter=0; //zähler für gesamte Einträge
counter=0; //zähler für 'gefundener Eintrag?' und Abbruchbedingung
i=0; //zähler für wort aus text
j=0; //zähler für wort aus der Suche
suchwort=suchwort+";"; //; für die Abbruchbedingung
suche="";
textstring = "";
while (suchwort.charCodeAt(j)!=59) //solange das Zeichen an der Stelle j nicht ';' ist
{
while (suchwort.charCodeAt(j)!=32 && suchwort.charCodeAt(j)!=59) //32 = leertaste
{
suche=suche+suchwort.charAt(j); //suche bekommt den Buchstaben von suchwort
j++;
}
if (suchwort.charCodeAt(j)==32)
{j++;} //falls noch ein Wort eingegeben wurde (Leertastenprüfung)...
suche = suche.toLowerCase(); //die buchstaben in suche werden kleingeschrieben
counter=0;
while (text[a].charCodeAt(i)!=59 && a<2)
{
while (text[a].charCodeAt(i)!=32 && text[a].charCodeAt(i)!=59)
{
textstring = textstring+text[a].charAt(i);
i++;
}
if (text[a].charCodeAt(i)==59)
{counter=1;} //damit Schritt ins nächste Arrayfeld, falls Array zuende
if (text[a].charCodeAt(i)==32)
{i++;}
textstring=textstring.toLowerCase();
if(textstring == suche) //wenn die strings gleich sind
{
gcounter++;
document.write("<a href='"+url[a]+"'>"+beschreibung[a]+"</a><br>"); //ausgabe von Beschreibung mit URL
counter=1;
}
textstring=""; //reset
if (counter==1)
{
a++;
i=0;
counter=0;
}
}
suche="";
a=0;
}
if (gcounter!=0)
{document.write("Es wurde 1 Eintrag gefunden");}
else
{document.write("Es wurden " + gcounter + " Einträge gefunden");}
}
</script>
</head>
<body>
<form name="suchfeld" method="post" action=""><input type="text" name="suche">
<input type="image" src="pics/suchbutton.gif" alt="suchen" onClick="aufrufen(document.suchfeld.suche.value);">
</form>
</body>
</html>
Geändert von TobWoerk (16.10.2007 um 23:23 Uhr).
|
|
|
04.01.2006, 15:06
|
#2
|
|
TP-Specialist
Registriert seit: Mar 2005
Ort: Unterfranken
|
document.write() funktioniert hier nicht, weil das Dokument schon geschlossen ist.
Wenn der Browser eine Seite anzeigt, arbeitet er vom Anfang des Codes bis zum Ende -- ist doch logisch. Sobald er den </html>-Tag erreicht bzw der Datentransfer vom Server abgeschlossen ist, wird das Dokument "geschlossen" und dem kann nichts mehr hinzugefügt werden.
Vergleiche:
Code:
<html>
<body>
<h1>
<script type="text/javascript">
document.write('Hallo Welt');
</script>
</h1>
</body>
</html>
Das funktioniert, weil wenn der Browser die document.write()-Methode ausführt, ist das Dokument noch nicht abgeschlossen. Der folgende Code funktioniert aber nicht:
Code:
<html>
<head>
<script type="text/javascript">
function weltBegruessen(){
document.write('Hallo Welt');
}
</script>
</head>
<body>
<a href="javascript:weltBegruessen();">Hier klicken</a>
</body>
</html>
Das kann nicht funktionieren: bis der Anwender auf den Link geklickt hat, wurde die Seite mit Sicherheit schon vollständig heruntergeladen und angezeigt und das Dokument damit geschlossen.
Du könntest zum Beispiel ein Popup öffnen lassen und die Infos dorthin schreiben. Das ginge dann ungefähr so:
Code:
var popUp=window.open("", "ergebnis", "width=400,height=300,scrollbars=yes");
var d=popUp.document;
d.open("text/html") // das Dokument wird als HTML-Datei geöffnet
d.write("<html><head><title>Suchergebnisse</title></head><body><p>");
if(gcounter==1) d.write("Es wurde 1 Eintrag gefunden");
else d.write("Es wurden "+gcounter+" Einträge gefunden");
d.write("</p></body></html>");
d.close(); // Wir müssen das Dokument explizit schließen
Es gibt andere Möglichkeiten, aber mit dem hier kannst du schon ein bisschen rumexperimentieren. 
|
|
|
04.01.2006, 15:43
|
#3
|
|
TP-Junior
Registriert seit: Jan 2006
Ort: Leverkusen
|
Ääh...
Sorry, aber bevor ich anfange weiter zu experementieren, würd ich dich gerne vorher verstehen.
Wie kommst du auf die Idee, dass der das Dokument schließt? Der arbeitet doch wohl die While-Schleife innerhalb des Java-Scriptes ab? Und da steht doch auch das document.write drin.
Hm, das mit dem PopUp versteh ich gar nicht.  Es geht ja nicht nur darum, dass ich die Einträgeanzahl angezeigt haben will, sondern vor allem, dass der Schweinehund ein zweites mit Leerzeichen abgetrenntes Wort direkt danach auch noch sucht.
Und dein Hallo-Welt mit Link - also, das funktioniert bei mir...
Geändert von TobWoerk (04.01.2006 um 15:48 Uhr).
|
|
|
04.01.2006, 16:01
|
#4
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Das Script wird erst mal eingelesen.
Eine Function wird erst abgearbeitet wenn sie aufgerufen wird.
Das machst Du ja auch onClick, wenn das Dokument also geschlossen ist.
Du kannst statt write im geschlossenen Dokument den Inhalt (innerText) eines Element ändern.
document.all.Resultat.innerText=".... Das Ergebnis ...";
und im Body dann noch:
... </form> <br><span id="Resultat"></span><br>
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
04.01.2006, 16:10
|
#5
|
|
TP-Junior
Registriert seit: Jan 2006
Ort: Leverkusen
|
Das Problem
Ich möchte nocheinmal zurück zu dem eigentlichen Problem. Vielleicht könnte sich jemand ausführlich mit dem oberen Skript beschäftigen?! Es geht darum, dass wenn man zwei Wörter in das Suchfeld eingibt, z.B. "TobWoerk Beyond" oder so, dass der dann nur nach TobWoerk sucht und dann wars das. Warum???
|
|
|
04.01.2006, 16:13
|
#6
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Damit haben wir uns doch befasst.
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
04.01.2006, 16:18
|
#7
|
|
TP-Junior
Registriert seit: Jan 2006
Ort: Leverkusen
|
ist das dein ernst? ich versteh dich komplett nicht?! ich will einfach nur n fehler in dem skript. das ist javascript intern gemeint. der geht nicht aus der while-schleife wies scheint. es geht mir darum den fehler zu finden, nicht darum, es irgendwie besser zu machen...
Geändert von TobWoerk (04.01.2006 um 16:20 Uhr).
|
|
|
04.01.2006, 22:56
|
#8
|
|
TP-Specialist
Registriert seit: Mar 2005
Ort: Unterfranken
|
Jetzt schau dir meine Beispiele ganz genau an. Die ersten zwei Code-Schnipsel in meinem Beitrag.
Im ersten Beispiel wird der Text ins Dokument reingeschrieben, weil die document.write()-Methode ausgeführt wird, noch während die Datei von dem Browser bearbeitet und angezeigt wird.
Im zweiten Beispiel wird die document.write()-Methode nicht sofort ausgeführt, sondern in einer Funktion mehr oder weniger "gespeichert" wird. Die Funktion wird erst dann ausgeführt, wenn sie ausgerufen wird, und sie wird erst dann ausgeführt, wenn der Anwender auf dem Link klickt, und das geht nur wenn das Dokument vollständig heruntergeladen, angezeigt und abgeschlossen ist.
Wenn das Dokument vollständig angezeigt worden ist, funktioniert document.write() nicht mehr. Es ist einfach so -- das gehört zum Grundwissen bei klientseitiges JavaScript. Das hast du nicht berücksichtigt, und ich und 321 sind davon überzeugt, dass das dein Fehler sein muss.
Ob die while-Schleifen abgeschlossen werden kannst du sehr einfach prüfen: Wenn du nach der äußeren while-Schleifen diesen Befehl einfügst:
Code:
alert('Kontrollpunkt erreicht');
siehst du, was passiert. Wenn der Kontrollpunkt nicht erreicht wird (also die alert-Box nicht angezeigt), liegt wohl doch ein anderer Fehler vor. Du kannst solche Kontrollpunkte an anderen Stellen einrichten, damit du den Fehler besser lokalisieren kannst.
|
|
|
04.01.2006, 22:59
|
#9
|
|
TP-Specialist
Registriert seit: Mar 2005
Ort: Unterfranken
|
...Augenblick mal: Woher weißt du, dass nur ein Begriff gefunden wird, wenn die write()-Methoden nicht ausgeführt werden?
|
|
|
05.01.2006, 00:14
|
#10
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Hi, hab's das ganze mal getestet:
Ändere die Zeile
Code:
while (text[a].charCodeAt(i)!=59 && a<2)
in
Code:
while (a<2 && text[a].charCodeAt(i)!=59)
dann gibt's keinen Script-Error mehr.
Hintergrund: Der Browser bricht die Scriptausführung ab, da text[2] nicht definiert ist. Wenn Du das ganze "rumdrehst", greift das Script nicht auf "text[2]" zu, da vorher schon "a<2" falsch ist.
@321: "innerText" wird nicht von jedem Browser unterstützt. Verwende besser "innerHTML".
|
|
|
05.01.2006, 00:20
|
#11
|
|
TP-Junior
Registriert seit: Jan 2006
Ort: Leverkusen
|
Vielen Dank.
Danach hab ich gesucht. Sehr erleichternd. Dankeschön!!!
|
|
|
05.01.2006, 00:27
|
#12
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Zitat:
|
Zitat von Malleus
Hintergrund: Der Browser bricht die Scriptausführung ab, da text[2] nicht definiert ist.
@321: "innerText" wird nicht von jedem Browser unterstützt. Verwende besser "innerHTML".
|
Bricht ab - ohne Fehlermeldung? (Objekt erwartet ...)
innerHTML: Ach ja, das vergass ich, aber das ist ja nicht das Essenzielle, dass er beleidigt sein und uns Unwillen vorwerfen muss.
Hab wahrscheinlich mehr am ganzen rumstudiert als er selber.
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
05.01.2006, 07:57
|
#13
|
|
TP-Junior
Registriert seit: Jan 2006
Ort: Leverkusen
|
Die Beledigung nehm ich nicht an
Das ist ne ziemliche Frechheit, das zu behaupten. Ich habe mich intensivst über mehrere Stunden und sogar 2 Tage damit beschäftigt und auch mit anderen Leuten drüber diskutiert. Und keiner hat den Fehler gefunden. Ich war ziemlich verzweifelt und bin dann über Google auf diese Seite gestoßen.
"Hallöchen. Mein erster Eintrag hier ins Forum am zweiten Tag der Beschäftigung mit JavaScript - also seid bitte vorsichtig mit mir!"
- das waren meine ersten Worte. Statt aber ne Beantwortung meiner Frage zu kriegen (dabei habe ich ausdrücklich formuliert, dass ich keine Alternativlösung sondern "nur" ne Problemlösung wollte), krieg ich fachliches Rumgesimpel und Dinge, die mich nich interessieren. Dass ich mit PopUps den Verlauf erkennen kann - das ist mir klar, das hab ich vorher auch schon genutzt. Ich denke, du hast einfach nicht kapiert, worums mir ging. Sehr unschöner Eintrag von dir. Vielleicht überlegst du dir das nochmal und nimmst ihn zurück. Von Unwillen hab ich nichts geschrieben.
|
|
|
05.01.2006, 09:15
|
#14
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Nicht wörtlich 'Unwillen' aber
Zitat:
|
Zitat von TobWoerk Post #5
Vielleicht könnte sich jemand ausführlich mit dem oberen Skript beschäftigen?!
|
Aber wenn alles ganz wörtlich nimmst ... 
Zitat:
|
Zitat von TobWoerk Post #7
ich will einfach nur n fehler in dem skript.
|
Rumsimpeln muss man manchmal und Alternativen in Betracht ziehn,
denn keiner kann Dir JavaScript oder sonst eine Sprache ändern,
dass sie gegen ihr Konzept verstösst und interessieren sollte es Dich schon,
denn Du möchtest doch was lernen dabei.
Gerade weil Du Dich rest seit kurzem mit JavaScript befasst,
gab Dir Rewboss auch recht gute Erläuterungen ab und
trug damit zur Problemlösung bei, nicht wie andere Leute.
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
05.01.2006, 09:44
|
#15
|
|
TP-Junior
Registriert seit: Jan 2006
Ort: Leverkusen
|
Nun...
... gut. Können wir den kurzfristig aufgemachten Kriegsschauplatz schließen.
Ist schon sicher richtig, dass du sagst, die Erläuterungen waren gut. Aber das wollte ich halt nicht. Weil mein Ausflug ins JavaScript erst mal beendet ist. Das war nur ne ganz kurzfristige Sache. Lerne das später, in nem halben Jahr oder so (Studium). Deshalb wollte ich einfach nur den Fehler wissen. Nicht mal primär, damit das Programm funktioniert, sondern damit ich beruhigt schlafen kann...
Danke auf jeden Fall und besonders nochmal an Malleus.
Und ich denke, ich werd hier in nem halben Jahr oder wann immer ich ernsthaft JS-Studium betreibe sicher wieder auftauchen. Bis dahin! 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 09:29 Uhr.
|
 |