Neu jQuery Code wird korrekt eingebunden, aber reagiert nicht

MaxWe

Sehr aktives Mitglied
6. August 2018
313
42
Hamburg
Moin Moin,

wir haben einige Zeilen Javascript / jQuery Code, der auf der Produktdetailseite arbeitet. Nun haben auch wir festgestellt, dass uns Ajax da zwischen die Beine grätscht und die Scripte nach dem wechsel einer Variation nicht mehr funktionieren..
Also habe ich das Forum durchsucht und bin auf die Lösung per Plugin und Hook 45 gestoßen, also fix umgesetzt und der Hook tut ansich sein Werk!

Leider habe ich nun das Problem, dass der Hook zwar funktioniert, ein einfaches console. log ist kein Problem, aber die einigen Zeilen Javascript/jQuery Code, die eigentlich benötigt werden agieren nicht wie geplant mit den Elementen im DOM.
Ich nehme an, dass hier die Reihenfolge des Ladens der DOM Struktur ein Problem ist..

Kennt da vielleicht jemand eine Lösung?

So sieht es derzeit in der "Hook-Datei" aus:

Code:
<?php

$args_arr["objResponse"]->script("jQuery(function($) {  $(document).ready(function(){//Produkt-Konfigurator: Wechsel der Größenreihe nach ausgewählter Farbe
    $('.product-configuration').find('button.colorswatch').on('click',function(){
        $(this).closest('.row').find('button').removeClass('active');
        $(this).addClass('active');
        $(this).closest('.col-md-10').find('div.sizesrow').hide();
        $(this).closest('.col-md-10').find('div[data-id=\"'+$(this).attr('data-id')+'\"]').show();
    });
    
    //Kategorieseite: Einblenden des Hovermenüs
    $('#product-list').find('div.image-wrapper').hover(
        function(){
            $(this).find('div.kategorieHover').slideDown('fast');   
        }, function(){
            $(this).find('div.kategorieHover').slideUp('fast');   
        }
    );
    
    //Kategorieseite: Wechsel des VaterBildes bei Hovern auf spezifisches Produkt
    $('a.hoverelement').hover(
        function() {
          var img    = $(this).attr('data-img');
          var finder = $(this).attr('original-img');
          $('img[data-src=\"'+finder+'\"]').attr('src',img);
        }, function() {
            var img = $(this).attr('original-img');
            $('img[data-src=\"'+img+'\"]').attr('src',img);
        }
      );
    
    //Produktdetailseite: Produkte Slider, wechseln der Produktpalette
    $('ul.productNav').find('a').on('click',function(){
        var element = $(this).attr('data-id');
        $(this).closest('ul').find('li').removeClass('active');
        $(this).closest('li').addClass('active');
        $(this).closest('div.modal-content').find('div.katSliders').hide();
        $(this).closest('div.modal-content').find('#'+element).show();
    });
    console.log('max Skript');
});
});
");

?>

Das console.log wird anstandslos ausgeführt und auch die anderen Sachen geben keine Fehler aus! Sie werden lediglich nicht getriggert..
Desweiteren versuche ich eigentlich den benötigten Code automatisch aus mehreren Dateien laden zu lassen, leider bekomme ich da immer nur eine 0 zurück?
Sähe dann so aus:

Code:
<?php
$js_content = file_get_contents('./js/js_max.js');
$js_content .= file_get_contents('./js/js_maxim.js');
$js_content  .= file_get_contents('./js/js_sonstiges.js');

$args_arr["objResponse"]->script("$js_content");
?>

Vielen Dank schon einmal im Voraus.. In letzter Zeit bin ich ja doch öfters hier... Es fällt immer wieder etwas neues an.

Beste Grüße,
Max
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.312
2.508
Berlin
Firma
css-umsetzung
Wenn dein code vorher funktionierte und nur durch das nachladen mittels ajax gestört wird, hättest du das mit dem on() beheben können.

Also würde ich dann lieber das hover und click sowie andere events mit dem on() bauen, damit die evenrs nach dem ajax neu initialisiert werden wäre das z.b.

Ungetestet und nur als Beispiel zu sehen
Code:
$('.product-configuration').on('click', 'button.colorswatch',   function(){

Ansonsten wäre ein link zum anschauen nicht schlecht, denn es könnte ja sein das du ein zeitliches Problem hast.
 
  • Gefällt mir
Reaktionen: Horus Sirius

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.881
528
Halle
Hallo,

die einfachste Lösung wäre hier - wie von css-umsetzung vorgeschlagen - mit Event-Delegation zu arbeiten. Dabei bindest du das Event nicht direkt an ein Element, sondern an ein Übergeordnetes mit Verweis auf das eigentliche Element. Du "delegierst" das Ereignis an einen anderen "Verantwortlichen". Der Vorteil dabei ist, dass der Event-Handler erhalten bleibt, auch wenn das Ziel-Element entfernt und neu eingefügt wird.
Also statt das Hover-Event direkt an die Elemente zu binden
JavaScript:
$('#product-list').find('div.image-wrapper').hover(...
geht das auch per Delegation an ein Übergeordnetes (hier beispielhaft einfach an body):
JavaScript:
$('body').on('hover', '#product-list div.image-wrapper', ...
 
  • Gefällt mir
Reaktionen: Horus Sirius

MaxWe

Sehr aktives Mitglied
6. August 2018
313
42
Hamburg
Vielen Dank schon einmal für eure Antworten :)

An die Lösung die Events an etwas übergeordnetes, das einfachste ist hier das 'document' Element, hatte ich auch schon gedacht. Leider ist es dann so, dass ich nicht mehr das angesprochene Element direkt als Objekt 'this' zur Verfügung habe, oder muss man es dann nur anders abgreifen?

Wir haben nun eine Lösung.. Etwas doppelt gemoppelt, aber es funktioniert.
Das Javascript bleibt wie es ist und wird doppelt eingebunden.
Erste Stelle: Per Plugin, dieses bindet das Javascript automatisch ein.
Zweite Stelle: Im Template, hier mit einer Besonderheit. Gestern bin ich auf einen JS Eventhandler vom JTL Shop gestoßen: 'evo:contentLoaded'
Ich horche auf diesen Handler und füge dort meinen Code ein. Funktioniert tadellos. Die Einbindung über das Plugin sorgt dafür, dass das Javascript bei Seitenaufruf zur Verfügung steht, die Einbindung über das Template sorgt dafür, dass es nach dem Ajax Aufruf wieder zur Verfügung steht.

Mit der file_get_contents Geschichte bin ich leider auch nicht weitergekommen, würde aber ja scheinbar auch nicht helfen, da der HOOK selbst scheinbar nicht der "richtige" für mich ist.

Die Lösung ist möglicherweise etwas quick & dirty, sollte aber vorerst funktionieren.
Beste Grüße
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.312
2.508
Berlin
Firma
css-umsetzung
Ich sehe bei unserer vorgeschlagenen Lösung keine Probleme mit dem this. Ich wäre eher vorsichtig mit dem event contentloaded. Da hatte ich schon öfter mal Timing Probleme.
 

MaxWe

Sehr aktives Mitglied
6. August 2018
313
42
Hamburg
Ich sehe bei unserer vorgeschlagenen Lösung keine Probleme mit dem this.
Hmm, bisher hatte ich immer das Problem, dass dann das document selbst im this lag und nicht das selektierte.
$(document).on('click','selektor',function(){...}); Hier ist this = document bei mir.

Ich wäre eher vorsichtig mit dem event contentloaded. Da hatte ich schon öfter mal Timing Probleme.
Ich werde es dennoch erst einmal so lassen. Sollte sich herausstellen, dass ich mit der vorgeschlagenen Lösung die Elemente trotzdem ordentlich ansprechen kann, stelle ich es nach und nach noch um.
Bisher funktioniert es, sollte ein Fehler auftreten habe ich aber aufjedenfall schon einmal einen Ansatz, vielen Dank also für die Warnung :)
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu QR Code Ausdruck der TSE Einrichtung / Updates von JTL-POS 0
Neu Hinweisfeld bei Versandarten: HTML Code möglich? Betrieb / Pflege von JTL-Shop 7
Neu WMS Mobile / kein QR Code Scan in das Passwort Feld mit Zebra MDE JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 0
Neu Alttexte aus OPC werden beim Slider nicht im Code angezeigt JTL-Wawi - Fehler und Bugs 0
QR-Code trennt das Kommata falsch - Rechnungstemplate JTL-Wawi 1.9 14
Giro QR Code in Angebotsvorlage JTL-Wawi 1.10 4
Neu Text & QR-Code in Rechnung einfügen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Umsatzsteuernummer von Kunden wird nicht in Wawi übertragen Shopify-Connector 3
Neu DHL Versenden 4.0 Firmenname wird nicht gedruckt JTL-ShippingLabels - Fehler und Bugs 3
Neu Anzeigen der Zahlungsart, die bei der Zahlung gesetzt wird Eigene Übersichten in der JTL-Wawi 10
Neu Die verwendete Version von JTL-Wawi wird nicht mehr unterstützt. Bitte nutzen Sie die Version 2.0.0.0 User helfen Usern - Fragen zu JTL-Wawi 1
Neu Pickliste wird auf Packtisch und in Wawi unter Picklisten nicht angezeigt. JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 1
Neu DHL Wunschzustellung wird bescheiden dargstellt - keine Shopzustellung auswählbar Plugins für JTL-Shop 0
Neu GLS WebAPI wird abgeschaltet (31.12.2026) JTL-ShippingLabels - Ideen, Lob und Kritik 4
Neu FBA-Streckenlager wird nicht mehr automatisch ausgebucht Einrichtung und Installation von JTL-eazyAuction 0
Unter-Unterkategorie Pfeil wird nicht angezeigt! Einrichtung JTL-Shop5 4
Unter-Unterkategorie Pfeil wird nicht angezeigt! Upgrade JTL-Shop4 auf JTL-Shop5 0
Kundennummer wird in E-Mail-Bestellung nicht angezeigt JTL-Wawi 1.10 0
Neu User-Agent ohne Kennung wird blockiert Onlineshop-Anbindung 4
OTTO: Keine Retourennummer (Hermes HSI) – Versandstatus wird nicht aktualisiert JTL-Wawi 1.11 1
Artikel erkennbar machen wenn nur als Dropshippimg zur Verfügung gestellt wird JTL-Wawi 1.10 5
Neu Rechnung wird zusätzlich auf Labeldrucker ausgegeben JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 1
Neu Varkombis Import Fehler "#VARKOMBI WIRD NICHT ANGELEGT#" JTL-Ameise - Fehler und Bugs 4
Neu Neue Box im Footer erstellt, Inhalt wird nicht korrekt angezeigt Betrieb / Pflege von JTL-Shop 1
Neu Der Auftrag wird nicht ausgeliefert. Der Auftrag befindet sich bereits auf einer anderen Pickliste. User helfen Usern - Fragen zu JTL-Wawi 1
Neu JTL WAWI V1.11.6.0 Stornorechnung, Stornotext wird nicht gespeichert und ist nicht abrufbar JTL-Wawi - Fehler und Bugs 0
Verkaufseinheit wird nicht auf Angebot/Auftrag/Rechnung/Lieferschein ausgegeben JTL-Wawi 1.11 3
Skonto bei Barzahlung wird angezeigt, aber nicht vom Rechnungsbetrag abgezogen JTL-Wawi 1.9 11
Neu Falsches Vorschaubild wird angezeigt, obwohl das richtige Bild in JTL hinterlegt ist User helfen Usern - Fragen zu JTL-Wawi 0
Inaktive Zahlungsart wird bei Eingangsrechnungen angezeigt JTL-Wawi 1.11 0
Neu Ameise: Kinderartikel (Variationskombinationen) aktualisieren – URL-Pfad/SEO-Slug wird nicht übernommen (Testlauf ok, Ergebnis bleibt leer) User helfen Usern - Fragen zu JTL-Wawi 5
Neu Rabatt auf Zahlungsart wird bei Lieferung ins EU-Ausland mit falscher MwSt berechnet? Betrieb / Pflege von JTL-Shop 0
Neu Eingabefeld der PayPal Kreditkartenzahlung wird bei eingeloggten Kundenkonto nicht angezeigt JTL-Shop - Fehler und Bugs 1
Neu Lieferschein Nummer wird auf der Rechnung wird komisch angezeigt Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu Artikelfilter: CACHING_GROUP_FILTER – wo wird der Cache invalidiert? JTL-Shop - Fehler und Bugs 0
Neu Wie wird die Seite "suche nach:" erzeugt? Allgemeine Fragen zu JTL-Shop 4
Neu Druckerzuordnung wird ignoriert WMS JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 1

Ähnliche Themen