TP Underground Lounge 07/08
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 04.01.2006, 09:02   #1
TP-Junior
 
Registriert seit: Jan 2006
Ort: Leverkusen
TobWoerk macht alles soweit korrekt

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).
TobWoerk ist offline   Mit Zitat antworten


Alt 04.01.2006, 15:06   #2
TP-Specialist
 
Benutzerbild von rewboss
 
Registriert seit: Mar 2005
Ort: Unterfranken
rewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKE
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.
rewboss ist offline   Mit Zitat antworten
Alt 04.01.2006, 15:43   #3
TP-Junior
 
Registriert seit: Jan 2006
Ort: Leverkusen
TobWoerk macht alles soweit korrekt

Ää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).
TobWoerk ist offline   Mit Zitat antworten
Alt 04.01.2006, 16:01   #4
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 04.01.2006, 16:10   #5
TP-Junior
 
Registriert seit: Jan 2006
Ort: Leverkusen
TobWoerk macht alles soweit korrekt

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???
TobWoerk ist offline   Mit Zitat antworten
Alt 04.01.2006, 16:13   #6
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 04.01.2006, 16:18   #7
TP-Junior
 
Registriert seit: Jan 2006
Ort: Leverkusen
TobWoerk macht alles soweit korrekt
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).
TobWoerk ist offline   Mit Zitat antworten
Alt 04.01.2006, 22:56   #8
TP-Specialist
 
Benutzerbild von rewboss
 
Registriert seit: Mar 2005
Ort: Unterfranken
rewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKE
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.
rewboss ist offline   Mit Zitat antworten
Alt 04.01.2006, 22:59   #9
TP-Specialist
 
Benutzerbild von rewboss
 
Registriert seit: Mar 2005
Ort: Unterfranken
rewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKE
...Augenblick mal: Woher weißt du, dass nur ein Begriff gefunden wird, wenn die write()-Methoden nicht ausgeführt werden?
rewboss ist offline   Mit Zitat antworten
Alt 05.01.2006, 00:14   #10
TP-Moderator
 
Benutzerbild von Malleus
 
Registriert seit: Aug 2004
Ort: Homburg / Saarland
Malleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKE
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".
Malleus ist offline   Mit Zitat antworten
Alt 05.01.2006, 00:20   #11
TP-Junior
 
Registriert seit: Jan 2006
Ort: Leverkusen
TobWoerk macht alles soweit korrekt

Vielen Dank.


Danach hab ich gesucht. Sehr erleichternd. Dankeschön!!!
TobWoerk ist offline   Mit Zitat antworten
Alt 05.01.2006, 00:27   #12
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 05.01.2006, 07:57   #13
TP-Junior
 
Registriert seit: Jan 2006
Ort: Leverkusen
TobWoerk macht alles soweit korrekt

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.
TobWoerk ist offline   Mit Zitat antworten
Alt 05.01.2006, 09:15   #14
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 05.01.2006, 09:44   #15
TP-Junior
 
Registriert seit: Jan 2006
Ort: Leverkusen
TobWoerk macht alles soweit korrekt

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!
TobWoerk ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > HTML Puristen > Javascript
Suche unter JS - While-Schleifenproblem Suche unter JS - While-Schleifenproblem
« Javascript nur in bestimmten Bereichen anwenden | onClick und XHTML »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:29 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7