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.044
2.299
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
527
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.044
2.299
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 Text & QR-Code in Rechnung einfügen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Code funktioniert nicht mehr Templates für JTL-Shop 4
Neu Frage zum Thema Skonto bei Bezahlungsarten Barzahlung und QR-Code Betrieb / Pflege von JTL-Shop 0
Neu 2-FA Code im Backend nicht scannbar JTL-Shop - Fehler und Bugs 0
Neu Probleme mit Pixel-Code eines Drittanbieters in Templatedatei Betrieb / Pflege von JTL-Shop 1
Neu GLS es fehlt immer ein Etikett / Code 0009 JTL-ShippingLabels - Ideen, Lob und Kritik 3
QR-Code auf Rechnung JTL-Wawi 1.11 13
Neu Kunden einen Retouren QR Code beim ausliefern mitschicken für Warenankauf ??? JTL-ShippingLabels - Fehler und Bugs 0
Neu Code:21920371] Gefahrstoff-Hinweis ID(s) EUH208 nicht gefunden User helfen Usern - Fragen zu JTL-Wawi 0
neue Zahlungsart "Barter", trotzdem erscheint "Zahlung per Überweisung und QR-Code" JTL-Wawi 1.10 1
Neu SQL Code für GPSR Felder (Kaufland) zeigt Fehler + wird daher nicht übertragen kaufland.de - Anbindung (SCX) 0
Neu Druckerzuordnung wird ignoriert WMS JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 1
Neu PayPal lehnt Zahlung ab, weil PLZ angeblich nicht beliefert wird User helfen Usern 2
Neu Konfigurator-Produkt wird mit 0 € in den Warenkorb gelegt JTL-Shop - Fehler und Bugs 2
Neu Abgelaufene MHD (Mindesthaltbarkeitsdatum) wird im Shop nicht angezeigt. JTL-Shop - Fehler und Bugs 2
Neu Bestellung aus JTL-Shop wird nicht in die Wawi übernommen Allgemeine Fragen zu JTL-Shop 1
Neu Druckvorschau wird doppelt aufgerufen JTL-Wawi - Fehler und Bugs 4
Bestand anderer Kinderartikel wird in Artikelstammdaten mit angezeigt – wie kann man das deaktivieren? JTL-Wawi 1.11 2
Bei Beschaffung wird keine Positionsnummer bei den Artikeln angezeigt JTL-Wawi 1.10 1
Neu Barcodescanner - Artikel mit # wird nicht übergeben Allgemeine Fragen zu JTL-POS 2
Neu Staffelpreise wird mit Sternchen angezeigt - wie ändere ich das Allgemeine Fragen zu JTL-Shop 0
seit 1.11 wird Druck ausgeführt nach JTL-POS Vorgang JTL-Wawi 1.11 0
Beschaffung Spaltensortierung / Spaltenanordnung / Spaltenfilter wird nicht mehr gespeichert JTL-Wawi 1.11 0
Neu GELÖST! Amazon "Aufzuschaltende Angebote" seit Tagen in "wird gesendet" bei WAWI 1.11.3 Amazon-Anbindung - Fehler und Bugs 10
Neu B2B Preis wird nicht an Amazon übergeben. Auch nicht WAWI intern User helfen Usern - Fragen zu JTL-Wawi 1
Gelöst: Lagerstand wird falsch berechnet JTL-Wawi 1.9 4
Neu FBA-Lagerbestand wird nicht mehr eingelesen - Fehler beim Verarbeiten von Amazon Events - FbaInventoryImported: Das angegebene Argument liegt außerha Amazon-Anbindung - Fehler und Bugs 13
Neu eBay-Angebote: Herstellernummer wird automatisch auf 'Nicht zutreffend' gesetzt - wie verhindern? eBay-Anbindung - Fehler und Bugs 0
Neu Retoure Vorlage "Mail" abgeändert, jedoch wird Standard Formular versendet Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu AlertService: Wunschzettel -> Hinzufügen/Entfernen wird nicht mehr als Benachrichtigung ausgegeben JTL-Shop - Fehler und Bugs 0
eBay-Merkmal wird nach Ameise-Import nicht übernommen (Wawi 1.10.11.0) JTL-Wawi 1.10 2
Neu HOOK_SMARTY_OUTPUTFILTER wird nicht auf Kategorieseiten ausgeführt? Technische Fragen zu Plugins und Templates 5
Update-Katastrophe schon wieder – warum wird so etwas als „Release“ veröffentlicht? JTL-Wawi 1.11 35
Neu Kundenkonto verknüpfen > "Die Anforderung wird nicht unterstützt" Installation von JTL-Wawi 1
Auftrag zur InetBestellungId 7610 wurde bereits erstellt. InetBestellung wird gelöscht. JTL-Wawi 1.10 0
Neu Nach Update auf 1.10.14.1 - Zahlungsart wird beim Auftrag erstellen nicht mit übernommen + Sepa Eingänge JTL-Wawi - Fehler und Bugs 0
Neu TopBarNote wird nicht angezeigt Allgemeine Fragen zu JTL-Shop 1
Lieferzeit / Lieferdatum wird im Shop bei Variantenartikeln nicht angezeigt Allgemeine Fragen zu JTL-Shop 0
Neu E-Mail Versandbestätigung wird an Amazon gesendet obwohl in den Einstellungen deaktiviert JTL-ShippingLabels - Fehler und Bugs 2
Neu Picklisten-Barcode wird nicht korrekt erkann JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 1
Neu Lastschrift wird nicht immer angezeigt JTL-Shop - Fehler und Bugs 0
Neu GPSR Information wird nicht mehr angezeigt oder falsch angezeigt Amazon-Anbindung - Fehler und Bugs 2
Neu Mapping (Menge) bei einigen Artikeln wird nicht durchgeführt Shopify-Connector 12
Neu Gesamtguthaben wird nach speichern höher angezeigt User helfen Usern - Fragen zu JTL-Wawi 3
Neu define('CONSISTENT_GROSS_PRICES', true) - wird nicht aktiv Sendungen in die Schweiz Betrieb / Pflege von JTL-Shop 0
X-Rechnung hat Validierungsfehler und wird abgelehnt JTL-Wawi 1.10 0
Neu DHL SOAP-API GKV v3 wird abgeschaltet JTL-ShippingLabels - Ideen, Lob und Kritik 2
Neuer Verkaufspreis eines Artikels wird in Angeboten/Aufträgen nicht übernommen, sondern nur der frühere ... JTL-Wawi 1.10 5
Neu Wms Artikeletikett drucken, wenn umgelagert wird Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Shop wird mehrfach angezeigt JTL-Wawi 1.10 8

Ähnliche Themen