jQuery wird bei Shopware standardmäßig eingebunden.
Da es aber ganz als letztes eingebunden wird, kann es natürlich sein, das wenn du deine Abfrage machst, es noch gar nicht geladen ist. So etwas müsstest du dann in der Abfrage berücksichtigen.
$(document).ajaxComplete(function(){
function show(id)
{ alert("drin");
var div = document.getElementById(id);
if (div.style.display !== "none") {
div.style.display = "none";
}
else {
div.style.display = "block";
}
}
});
Doch leider bekomme ich im Firebug den Fehler, dass $ not defined ist.
Ich will eigentlich nur bei Klick auf ein Bild ein Div ein-bzw. ausblenden. Biser habe ich das mit einem Link auf dem Bild und onclick=„javascript:show(‚divid‘); return false;“ realsiert. Doch das funktioniert nicht mehr.
wie erwähnt - auch bei dir ist jQuery eingebunden, siehe (/test-update/web/cache/1461515068_797affe28c27dfaec3f19047ce8371f6.js):
<script src="/test-update/web/cache/1461515068_797affe28c27dfaec3f19047ce8371f6.js">
<div class="js--overlay"></div>
<script>
<script type="text/javascript">
</body>
</html></code></pre>
<p>Somit ist jQuery bzw. $ einfach noch nicht geladen / verfügbar, wenn du es nutzen möchtest.</p>
<p>Und noch komplizierter hätte man den Code nicht schreiben können <img alt="Angry-Face" src="http://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/angry-face.png" style="height:16px; width:16px" title="Angry-Face" />. Thema jQuery - show() und hide(). Oder noch einfacher - toggleClass().</p>
<p>Beste Grüße</p>
<p>Sebastian</p>
{extends file="parent:frontend/index/index.tpl"}
{block name="frontend_index_header_javascript_jquery" append}
{literal}
$( "#deine-image-element-id" ).click(function() {
$('#dein-div-zum-ausblenden').toggleClass( "display" );
});
{/literal}
{/block}
Natürlich dann noch entsprechend die Class .display oder sonst was entsprechend anlegen.
Und wie kann ich jetzt mein Problem umgehen / beheben?
Danke und lg Nadja
Hallo,
wenn du nicht gerade das Script nach der jQuery-Einbindung einbinden möchtest (bspw. über {block name=„frontend_index_header_javascript_jquery“ append}), könntest du es beispielsweise so lösen:
window.addEventListener("load", onloadEvent, false);
function onloadEvent(){
$( document ).ready(function() {
$( "button" ).click(function() {
Der auszuführende JavaScript-Code
});
});
}
Du solltest natürlich button noch durch den Klassennamen des entsprechenden Buttons ersetzen.
PS: Habe meine Antwort noch einmal editiert. Habe es gerade auch noch einmal getestet - funktioniert ohne Probleme.
Den Code entsprechend in einer eigenen JS Datei anlegen und diese über die Theme.php laden.
Man hängt sich hier praktisch an das Emotion Plugin / onLoadEmotionFinished Event und sobald die EK fertig geladen ist wird der entsprechende Code erst ausgeführt.
Diese habe ich unter meinTemplate/frontend/_public/src/js hochgeladen.
Die Theme.php habe ich wie folgt abgeändert:
class Theme extends \Shopware\Components\Theme
{
/** @var array Defines the files which should be compiled by the javascript compressor */
protected $javascript = array(
'src/js/toggle.js'
);
protected $extend = 'Responsive';
Wenn ich den Cache leere und die Seite neu lade funktioniert es leider trotzdem nicht.
Ich kann auch wenn ich nach #pod suche mein Javascript nicht finden.
Hast du dein Theme auch neu kompiliert? Denn da du eine neue JS Datei hinzugefügt hast, musst du auch hier das Theme erneut kompilieren / erneut zuweisen im Theme Manager, wie bei den Less Files.
Die Class nondisplayinfo musst du natürlich auch entsprechend irgendwo in deinen Less/CSS Dateien definiert haben.
Ansonsten kannst du auch noch statt toggleClass einfach toggle() verwenden:
// Togglet die Class
$("#podinfo").toggleClass( "nondisplayinfo" );
// ODER
// Setzt einfach ein style="display:none";
$("#podinfo").toggle();
Wenn du jetzt nicht weiter kommst, kannst du mir gerne mal FTP / Backend Daten an info@shopwareianer.com schicken und ich schaue flott drüber.
In dem Unterordner test-update auf der Startseite gibt es ein oranges Bild “Podcast” dies hat die ID podbild. Im Quelltext findest du darunter ein Div mit der ID podinfo.
Hab gerade auch nochmal nachgesehen: bei mir ist beides so benannt.