Moin!
Ich habe gerade ein merkwürdiges Fehlverhalten in meinen Auswahllisten.
Ich möchte bei klick auf den Link im DropDown etwas auslösen (Dynamische Preisberechnung)…
Wenn ich folgendes nutze, geht es:
$('#productSelections ul.drop li a').click(function() {
// doing something
});
Aber da dies nicht mehr greift, sobald ich eine Auswahl bei den Varianten mache, habe ich es mit live() und on() versucht. Doch leider ohne Erfolg.
Woran kann das liegen?
Das Script binde ich mit [{oxscript include=“js/addProductPrice.js”}] ein.
NACHTRAG:
Kann es sein, dass es sich mit der ‘js/widgets/oxdropdown.js’ nicht versteht?
MfG
on() gibts es erst ab der jQuery Version 1.7
Wie sieht dein Code mit live() aus?
übrigens kannst du deine click() Funktion in eines der Templates packen, die beim Variantenaufruf geladen werden, diese findest du im Unterordner ajax/
Du musst den Script-Code ebenfalls in den folgenden Dateien einfügen:
/out/THEME_NAME/tpl/page/details/ajax/productmain.tpl
/out/THEME_NAME/tpl/page/details/ajax/fullproductinfo.tpl
Das sind die Templates, die bei AJAX-Requests auf der Detailseite geladen werden.
Diese Scripts werden dann nochmal evaluiert und auf die neuen DOM-Elemente angewandt.
[B]== EDIT ==[/B]
vanilla thunder hat’s bereits geschrieben 
Herzlichsten Dank ihr beiden!
Dann kann ich da schon einmal weiterarbeiten…
Moin!
Jetzt muss ich doch nochmal nachfragen…
Wie muss ich die Datei in den Templates einbauen?
[{oxscript include="js/addProducts.js"}]
scheint nicht zu funktionieren.
Ich habe es mir .bind() und .click() versucht. Doch es geht nur, bevor man eine Variante gewählt hat…
In den Ajax-Dateien wird es so aufgerufen (Beispiel):
{oxscript add="$( '#variants' ).oxArticleVariant();"}]
Komme absolut nicht weiter…
Mein Quelltext der Datei sieht derzeit so aus:
$(document).ready(function () {
$("#btn_add_minus").live('click', function() {
var oldValue = $("#amountToBasket").val();
// Don't allow decrementing below zero
if (oldValue > 1) {
var newVal = parseFloat(oldValue) - 1;
} else {
newVal = 1;
}
$("#amountToBasket").val(newVal);
});
$("#btn_add_plus").live('click', function() {
var oldValue = $("#amountToBasket").val();
var newVal = parseFloat(oldValue) + 1;
$("#amountToBasket").val(newVal);
});
$('.selectorsBox div.dropDown ul.drop li a').live('click', function() {
change_price_(this);
});
});
Die oberen beiden Anweisungen gehen! Auch nach Variantenauswahl. Also muss es an dem Berechnungscode liegen…
Moin,
ich denke mal in der Datei js/addProducts.js befindet sich dein .on() bzw. .live()…
Binde dieses Script einfach nochmal in den AJAX-Templates so ein:
[{oxscript include=“js/addProducts.js”}]
Es muss einfach nochmal ausgeführt werden, damit die Javascript-Events auf die neu geladenen DOM-Elemente angewendet werden.
Hi,
danke für die Hilfe, aber es will irgendwie nicht.
Die oberen beiden Anweisungen in dem Code in meinem vorherigen Post (habe ich nachgetragen) klappen… auch nach dem Auswählen der Varianten. Doch bei dem unteren tut sich einfach nichts…
Das kann doch nicht war sein…
der JS-Code aus folgendem Threead dient zur Berechnung:
http://forum.oxid-esales.com/showthread.php?t=4907
Diesen habe ich ganz unten in die details.tpl kopiert. Muss ich diese Funktionen auch nochmal in die Ajax-Datei kopieren??
NACHTRAG:
Die Funktion wird auch aufgerufen.
Habe es mit alert() getestet.
Doch nach dem Ajax-Reload tut sich garnichts mehr…
Das ist echt zum Mäuse melken…
Wie sieht denn dein Selektor für das .live() bzw. .on() Event aus?
Ist dieser nach dem AJAX-Reload vllt. nicht mehr gültig?
Ansonsten weiß ich gerade so aus der Ferne auch nicht weiter 
Hat ggf. noch jemand anderes eine Idee? 
Hat denn noch nie jemand dieses Phänomen gehabt?
Folgenden Inhalt hat die productmail.tpl im Ordner “ajax”:
[{oxscript include="js/addProducts.js"}]
[{assign var="oDetailsProduct" value=$oView->getProduct()}]
[{assign var="currency" value=$oView->getActCurrency()}]
[{assign var="oPictureProduct" value=$oView->getPicturesProduct()}]
[{if $oViewConf->getFbAppId()}]
[{oxscript add="$(function(){oxFacebook.initDetailsPagePartial();});"}]
[{/if}]
[{if $oView->showZoomPics()}]
[{oxscript add="$( '#zoomTrigger' ).oxModalPopup({target:'#zoomModal'});"}]
[{oxscript add="$( '#morePicsContainer' ).oxMorePictures();"}]
[{oxscript add="$('.cloud-zoom, .cloud-zoom-gallery').CloudZoom();"}]
[{/if}]
[{oxscript add="$( '#productTitle' ).oxArticleActionLinksSelect();"}]
[{if $oDetailsProduct->loadAmountPriceInfo()}]
[{oxscript add="$( '#amountPrice' ).oxAmountPriceSelect();"}]
[{/if}]
[{oxscript add="$( 'div.dropDown p' ).oxDropDown();"}]
[{oxscript add="$( 'div.tabbedWidgetBox' ).tabs();"}]
[{oxscript add="$( 'a.js-external' ).attr('target', '_blank');"}]
[{if $oView->isReviewActive() }]
[{oxscript add="$( '#reviewRating' ).oxRating({openReviewForm: false, hideReviewButton: false});"}]
[{oxscript add="$( '#writeNewReview' ).oxReview();"}]
[{/if}]
[{oxscript add="$( '#variants' ).oxArticleVariant();"}]
[{include file="page/details/inc/productmain.tpl"}]
[{oxscript}]
[{oxscript include="js/addProducts.js"}]
Ganz unten ist mein Code eingebunden…
Der obere Teil mit $(BLA).live() geht… der wichtige Teil aber nicht.
Ändern sich die IDs der Felder bei dem Ajax-Reload? Z.B. die des Feldes, in dem der Produktpreis steht?
MfG
Wenn du “live” verwendest musst du den Code nicht in die Ajax-Templates einbauen. Evtl. hast du einen js-Fehler in den Ajax-Templates der die weitere Ausführung verhindert. Das kannst du z.B. in der Konsole von Chrome sehen. Gehen die restlichen Javascripts noch (Variantenauswahl)? Stell einen Shop doch mal online mit deinem Code damit man sich das mal anschauen kann.