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
7.709
2.166
Berlin
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
7.709
2.166
Berlin
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
Sonderzeichen via HTML Entity Code JTL-Wawi 1.6 1
Neu Insert code "Smarty" Smalltalk 0
Neu DHL GKV API 3 - Code 15 „Object reference not set to an instance of an object“ JTL-ShippingLabels - Fehler und Bugs 0
Embed Code mit OPC einfügen? Einrichtung JTL-Shop5 8
EIR Code JTL-Wawi 1.10 0
Neu Workflow „Rechnung drucken“ wird nicht automatisch ausgeführt JTL-Workflows - Fehler und Bugs 2
Kunden UStID wird nicht aus Amazon in JTL übermittelt Amazon-Anbindung - Fehler und Bugs 1
Abgleich wird abgebrochen durch diesen Fehler Shopify-Connector 4
In Diskussion Workflow wird ausgeführt obwohl Bedingung nicht zutrifft. JTL-Workflows - Fehler und Bugs 9
Neu Eigene Felder - Sortierung wird nicht in JTL Shop übernommen - Anzeige im Shop immer unterschiedlich User helfen Usern - Fragen zu JTL-Wawi 0
Neu Kindartikel-Name wird im Shop nicht richtig angezeigt Allgemeine Fragen zu JTL-Shop 8
Workflow mit Bedingung Lieferant wird nicht mehr ausgeführt JTL-Wawi 1.9 1
PDF Dokument (Rechnung, Angebot, AB) wird als Titel Test gezeigt JTL-Wawi 1.9 0
Neu Händlerbund Plugin: "Zahlung und Versand" wird nicht automatisch übernommen Plugins für JTL-Shop 2
Neu Stückzahl teilbar wird nicht Importiert User helfen Usern - Fragen zu JTL-Wawi 2
Neu Retourennummer wird nicht angezeigt Allgemeines zu den JTL-Connectoren 0
Reiter Lieferanten in der Artikelübersicht wird wegen dem fehlenden Recht nicht angezeigt JTL-Wawi 1.10 14
Wawi 1.9.8.0 mit Gmail OAuth wird blockiert JTL-Wawi 1.9 0
Neu Zustandsbeschreibung wird beim auflisten von Produkten nicht übertragen Amazon-Anbindung - Fehler und Bugs 1
OTTO Verkäufer-Inventar wird nicht importiert JTL-Wawi 1.8 0
Neu zum 30. Juni 2025 wird der Amazon Lister 1.0 eingestellt JTL-ShippingLabels - Fehler und Bugs 5
Neu Ameise: Warengruppe wird beim Artikelimport nicht übernommen – was mache ich falsch? JTL-Ameise - Fehler und Bugs 6
Neu Startseite wird doppelt ausgegeben Templates für JTL-Shop 0
DHL Versenden 3.0 – Nachnahme bei zwei Paketen: Betrag wird nicht aufgeteilt JTL-Wawi 1.9 1
Versandgruppe wird nicht sauber übertragen kaufland.de - Anbindung (SCX) 0
Neu AMAZON Business Kunde - Firmenzeile der Adresse wird von AMAZON übernommen User helfen Usern - Fragen zu JTL-Wawi 2
Neu Richtige Picklistenvorlage wird nicht gedruckt Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu Nach Update 5.5.0: Überall zu viele Nullen bei den Mengenangaben (1 wird als 1,0000 angezeigt) JTL-Shop - Fehler und Bugs 8
Neu JTL Shop 5.5.1 : Lieferzeit wird mit "0 Werktagen" ausgegeben, obwohl Lieferzeiten bei Versandarten hinterlegt sind JTL-Shop - Fehler und Bugs 3
Neu O.P.I Händlerbeleg wird immer gedruckt JTL-POS - Fehler und Bugs 0
In Diskussion Workflow kurze Pause per Batch - Fehler "Die Eingabeumleitung wird nicht unterstützt" JTL-Workflows - Ideen, Lob und Kritik 6
In Diskussion Per Workflow Versandart ändern - EK wird nicht korrigiert JTL-Workflows - Ideen, Lob und Kritik 1
Artikelübersicht - in Aufträgen - "Firma" fehlt weiterhin - nur der Name des Ansprechpartners wird angezeigt JTL-Wawi 1.10 4
Neu Kleinpaket-Versandetikett wird nicht gedruckt JTL-ShippingLabels - Fehler und Bugs 16
Standardasin wird in der Artikelübersicht nicht mehr angezeigt JTL-Wawi 1.10 8
Neu neue Sendungsnummer (DHL) wird nach Storno des 1. Label nicht an Amazon übergeben JTL-ShippingLabels - Fehler und Bugs 9
Neu Amazon "Aufzuschaltende Angebote" seit Tagen in "wird gesendet" Amazon-Anbindung - Fehler und Bugs 8
Neu Nachricht wird nicht verschickt - Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt User helfen Usern - Fragen zu JTL-Wawi 1
Exportvorlage CSV Datei - Kopfzeile wird nicht eingetragen JTL-Wawi 1.10 3
Neu Wie kann es sein, dass ein "Rechnung erstellt" - Workflow 3 Tage später nochmal ausgelöst wird? User helfen Usern - Fragen zu JTL-Wawi 5
Neu Steuerklasse tax_class wird beim Artikelsync nach WooCommerce nicht mehr gesetzt WooCommerce-Connector 0
Neu Erste Position wird bei Zwischensumme nicht mitberechnet JTL-Wawi App 2
Neu Hersteller Seite wird im Shop nicht angezeigt Allgemeine Fragen zu JTL-Shop 1
Neu Anzeige des Lagerbestands unter "Verknüpfte Artikel" wird nicht aktualisiert JTL-Wawi - Fehler und Bugs 4
Neu Card Reader von Paypal (Zettle) wird nicht erkannt. Einrichtung / Updates von JTL-POS 4
Nach Update auf JTL 10.10.4 wird kein Versand mehr an Amazon übermittelt JTL-Wawi 1.10 4
OTTO - Testbestellung wird nicht zu JTL übertragen Otto.de - Anbindung (SCX) 1
Neu FFN Retour-Sendungsnummer wird nicht übertragen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Google reCaptcha wird nicht angezeigt Plugins für JTL-Shop 2
Neu DHL Label Firmenzusatz wird nicht ausgedruckt. JTL-ShippingLabels - Fehler und Bugs 1

Ähnliche Themen