Zum Inhalt springen

Einfacher back-to-top-Button mit jQuery funktioniert nicht

Erstellt am 11. Januar 2018 · 12 Antworten · letzte Antwort am 2. Februar 2018

Tags: JavaScript & AJAX, TYPO3 7, Frage

Power-Poler ·

Ich meinte nicht, das du jQuery rausschmeißen sollst, dass ist deine Problem, ähm Entscheidung, wenn du das nutzt 😃

Ich meine nur du sollst deine Funktion mal in window.addEventListener ('load', function () { CODE }); packen (Natürlich in jQuery, keine Ahnung wie es da aussehen muss 😃.
Ich mag jQuery nicht, finde es zu unübersichtlich.
Also das $(".back-to-top").hide(); erst ausgeführt wird, wenn die Seite wirklich schon geladen ist.

Teisinger ·

was ist jQuery zu unübersichtlich=? Muharhar...

jQuery:

(function($) {
//DEIN CODE bei document ready
$(window).on("load", function() {
//DEIN CODE bei document full load
});
$(window).on("resize", function() {
//DEIN CODE bei resize
});
}(jQuery);

Schwerus ·

lustig find ichs eigentlich nicht... nunja...

Also, um auf die Anregung von Power-Poler eine belastbare Anwort zu geben:
Checken, ob das DOM geladen ist, ist die Grundlage und erste Funktion der meisten jQuery-Codes, und das geht, wie Teisinger anzudeuten versuchte, mit

$(document).ready(function() {
##CODE HIER, wird erst audgeführt, wenn Seite ganz geladen ist

oder kürzer ($(document).ready(function() wird z.B. vom Firebug angemeckert) einfach mit
$(function() {
##CODE HIER, wird erst audgeführt, wenn Seite ganz geladen ist

wie der geneigte Leser jetzt annehmen darf und wird, habe ich das auch so umgesetzt - und es geht trotzdem nicht... wie gesagt, zum Lachen ist's net....

Teisinger ·

zum einen die erste variante ist depricated und funktioniert mit jQuery >= 3 nicht mehr.
Zum anderen:
hast du schon einmal geguckt ob die events überhaupt ausgelöst werden? console.log / alert?

Schwerus ·

Vielen Dank für die prompte Antwort, und

genau DAS ist das Problem:

Ich habe das Script jetzt auf das Minimum eingedampft. Es wird auch angesprochen... wenn ich

ASDF $(function) reinschreibe, gibt es einen Error im FireBug


Sobald aber ein "funktionierendes" Script läuft, passiert ABSOLUT NICHTS - weder

$(function() {
alert("passiertwas");
});

NOCH

$(function() {
console.log( "passiertwas" );
});

liefert weder ein Popup noch einen Eintrag in der Console...

Dazu testweise das Ganze auf dem Desktop nachgebildet - hier funxt sowohl die ursprüngliche Version als auch die rudimentären Tests...

Ich weiß echt nicht mehr weiter...

Power-Poler ·

Ah Ok, wusste ich nicht, dass $(function() dies bereits alles von sich aus macht.
Klingt aber dann danach, als ob das Event nicht feuert.

Teisinger ·

wie kein fehler im firebug? auch im chrome nix?

kann passieren wenn 2 jquery versionen gleichzeitig geladen werden.
du kannst ja mal:

console.log("test1");
(function($) {
console.log("jquery rennt");
$(window).on("load", function() {
console.log("event load funkt");
});
})(jQuery);

test1 muss auf jedenfall ausgegeben werden, sonst wird entweder die datei nicht eingebunden oder davor ist schon ein js fehler!

Schwerus ·

Danke für Ihre Antworten!


Tatsächlich dürfte es die letzten 2 Worte sein, die Teisinger tippte: "JS-Fehler"...

Ich hatte an dem Abend meines letztes Posts frustriert aufgegeben - dann gegen 22:00 noch mal die Kiste hochgefahren und die allerletzte Idee ausprobiert:

Im Header tummeln sich nämlich einige .js, die von meiner Vermutung nach von der Extension PerfectLightbox stammen. Keine doppelten .js-Bibliotheken, aber u.a.
https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"
https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"
und das
script type="text/javascript" src="?load=effects,builder"

Also habe ich die Extension abgeschaltet.
Die Seite neu geladen...


UND DAS WAR'S! JS WIRD SOFORT AUSGEFÜHRT!!! ***KEUCH***

Jetzt stehe ich natürlich von dem Problem, entweder
a) eine andere Lightbox-Extension zu insten oder
b) den Fehler in der Extension zu suchen - denn der Kunde möchte sowohl den js-Schnickschnack, als auch ne Lightbox...

Wenn jemand zu a) nen Tipp hat, wird gerne genommen

Schwerus ·

Irgendwie ist die Lösung, die ich bereits gepostet hatte, verschwunden, deswegen hier nochmal:

"ein js fehler" von Teisinger trifft es ziemlich genau - nur, dass er nicht vom selbst-Gebauten kam.

SONDERN VON DER EXTENSION perfectlightbox!
Sie bringt eigenes jQuery mit - und bindet auch eigene jQ-Frameworks mit ein.

Extension deaktiviert - und jetzt läuft der einfache Code... doof nur, dass der Kunde natürlich weiterhin seine Lightbox haben will.

Ich versuche mal eine andere - bin aber natürlich gerne für Tipps offen.

Teisinger ·

ganz einfach global die Einbindung von JS Dateien deaktivieren bzw. löschen. Danach die benötigten JS-Files manuell includen:

### Erste Zeile löscht alle Includes von JS-Files auch die der Extensions, sofern du dein TS als letzten laden lässt.
page.includeJS >
page.includeJS {
file1 = path
.
.
.
etc.
}