Untenstehender vereinfachter Code soll bei einem Klick auf myAction das entsprechende data-target togglen. Das Template wurde einmal in der index.tpl und einmal in einem Code Element in der EInkaufswelt included. Jedoch habe ich hier das Problem das sich das JavaScript manchmal dazu entscheidet korrekt zu funktionieren und mal wieder nicht. Meißt werden die Klassen nicht wie gewünscht getogglet. Das Theme wird vor Plugins injiziert und vom Responsive Theme abgeleitet.
Überseh ich hier etwas, oder hat jemand eine Idee woran das liegen könnte?
Template:
Some text
Sometext
Sometext
Some content
JavaScript:
$(function() {
function myFunction(elements) {
$.each(elements, function(i, el){
var ele = $(el);
ele.find('.myAction[data-target]').click(function() {
$(this).toggleClass('is--active');
ele.find('.myContents').toggleClass('is--open');
ele.find($(this).attr('data-target')).toggleClass('is--active');
});
});
}
myFunction($('.myContainer'));
$.subscribe("plugin/swEmotionLoader/onLoadEmotionFinished", function(me) {
myFunction($('.myContainer'));
});
});
Wenn ja: Dann sollte es keine Probleme geben, ansonsten gibt es eine RaceCondition. Das Javascript von Shopware wird asynchron geladen. Da könnte es passieren, dass dein Skript ausgeführt wird, bevor das von Shopware geladen wurde.
Kannst du mal prüfen, ob dein Event-Callback von plugin/swEmotionLoader/onLoadEmotionFinished überhaupt aufgerufen wird?
Einfach mal vor myFunction($(’.myContainer’)); innerhalb der Callback-Funktion ein console.log(“funktioniert”); und prüfen, ob “funktioniert” in der Browser-Konsole steht.
Kannst du mal prüfen, wie oft die Funktion „myFunction“ aufgerufen wird?
Wenn diese 2x aufgerufen wird, dann werden ja auch zwei Event-Listener an die Elemente gehängt. D.h. bei einem Klick, wird die Klasse gesetzt und sofort wieder entfernt. Verstehst du was ich meine?