• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] JS führt Ready-Funktion immer wieder aus

jsnew

New member
Hallo zusammen,

ich bin weder JS-Profi noch Anfänger, also irgendwo dazwischen. Weiß aber nicht genau, wie ich mein Problem beschreiben soll. Daher habe ich auch über die Suche nichts Passendes gefunden.

Also, ich versuche es mal:

Mit dem Aufruf meiner Webseite rufe ich ein Start-Script auf, um ein DIV mit Inhalt zu füllen. Das geht auch. Jetzt kann ich ein Suchfeld ausfüllen und das Ergebnis wird in genau diesem DIV gezeigt. Das geht auch. Aber nur, so lange ich den Such-Button deaktiviere. Sobald ich ihn wieder aktiviere, füllt sich das DIV wieder mit dem Inhalt des Start-Scripts.

Im Code sieht das grob so aus:

Code:
<script>
     $(function() { // beim Seitenstart
          $('#run-Suchen').click(Suchen); // wenn jemand auf "Suchen" klickt, dann Funktion "Suchen" ausführen.
          $(document).ready(Start); // zum Start direkt die Funktion "Start" ausführen.
     });

     function Start() {
          InhaltAuffuellen(); // füllt das DIV mit einem Inhalt zum Start
          $('#Suchbegriff').focus(); // den Fokus auf das Suchfeld setzen
     }
			
     function Suchen() {
          this.disabled = true; // Such-Button deaktivieren
          var Suchbegriff = $('#Suchbegriff').val(); // Suchbegriff auslesen
          InhaltSuchen(Suchbegriff); // nach dem Suchbegriff suchen
          $('#Suchbegriff').focus(); // den Fokus wieder auf das Suchfeld setzen
     }

     function InhaltAuffuellen() {
          // hier wird ein Inhalt aus einer Datenbank gelesen und im DIV ausgegeben
     }
			
     function InhaltSuchen(Suchbegriff) {
          // hier wird der Suchbegriff in einer Datenbank gesucht und im DIV ausgegeben
          $('#run-Suchen').prop('disabled', false); // Such-Button wieder aktivieren, in dem Moment überschreibt sich das DIV allerdings wieder mit dem Inhalt aus der Funktion "InhaltAuffuellen"
     }
</script>

Das Problem ist: Wenn ich beim Button #run-Suchen "disabled" auf "true" lasse, zeigt er mir das Suchergebnis richtig an. Sobald ich es am Ende wieder auf "false" setze, erscheint aber wieder der Inhalt aus der Funktion "InhaltAufuellen".

Diese Funktion wird aber doch eigentlich nur einmal zum Seitenstart aufgerufen. Oder habe ich da was übersehen?
 
Code:
$(function() { // beim Seitenstart
          $('#run-Suchen').click(Suchen); // wenn jemand auf "Suchen" klickt, dann Funktion "Suchen" ausführen.
          $(document).ready(Start); // zum Start direkt die Funktion "Start" ausführen.
     });
würde ich zu
Code:
$(document).ready(Start); // zum Start direkt die Funktion "Start" ausführen.
ändern und $('#run-Suchen').click(Suchen); in die Funktion Start mit reinpacken.

Da die Funktionen InhaltAuffuellen und InhaltSuchen hier nicht definiert sind, keine Ahnung ob du was übersehen hast.

Ansonsten hilft auch immer mal ein blick in die Fehlerkonsole
 
Hallo MiniA4kuser,

vielen Dank für Deine Hilfe! Ich habe die Funktion jetzt so umgestellt, das Problem bleibt allerdings gleich.

Meine Beobachtung über die Konsole und die Log-Daten ist die:

Innerhalb der Funktion InhaltSuchen lädt er eine JSON-Datei und wertet sie aus. Noch während er das tut, aktiviert er schon wieder den Button und dann lädt sich der Inhalt neu.

Code:
function InhalteSuchen(Suchbegriff) {
	if (Bedingung 1) {	
		$.getJSON(url1, function (data) {
			// hier sucht er (Abbiegung 1)
			// an dieser Stelle kommt er später an, als am Ende
		})
		.fail(function () {
			// Abbiegung 2
			// auch an dieser Stelle kommt er später an
		});
	} else {
		// Abbiegung 3
		// auch hier kommt er später an
	}
	// hier kommt er früher an, während die Unterfunktionen noch laufen
}

Jetzt könnte ich natürlich an den verschiedenen Stellen der Unterfunktion, die erst später erreicht werden, den Button wieder aktivieren. Das funktioniert. Aber dann müsste ich an jeder "Abbiegung" immer den Befehl einkopieren. Eleganter wäre es doch - egal welche Abbiegung die Funktion nimmt - immer nach dem Ausführen der Funktion den Button wieder zu aktivieren. Oder? Versteht ihr, was ich meine...? :)

Außerdem: Warum lädt sich eigentlich die Seite neu, nur weil ich den Button zu früh wieder aktiviere? Verstehe den Zusammenhang nicht. Wenn ich Button erst am Ende der Abbiegungen wieder aktiviere, geht es ja...
 
Innerhalb der Funktion InhaltSuchen lädt er eine JSON-Datei und wertet sie aus. Noch während er das tut, aktiviert er schon wieder den Button
das ist ja richtig(bis auf "Abbiegung 3" - "Abbiegung 3" kommt vor "hier kommt er früher an")
das erklärt aber nicht, was das anzeigen eines buttons mit dem inhalt eines divs zu tun hat
 
Hast du einen Link, wo wir uns das live ansehen können. Mein Verdacht ist, dass der Button in einem <form> ist und dieses Formular beim Klicken abgeschickt wird - es wird also die komplette Seite neu geladen.
 
Zurück
Oben