Frage

Ich arbeite innerhalb des konfigurierbaren Optionsblocks auf der Produktseite und füge ein JavaScript direkt unten ein. Ich hatte keine Probleme, aber plötzlich bekomme ich einen Fehler in der Konsole: "Uncortht TypeError: Die Eigenschaft" Konfiguration "von undefined kann nicht gelesen". Ich nehme an, es ist ein Konfliktfehler. Ich habe mich um die Initialisierung des Prototypobjekts bewegt und die Dinge ohne Erfolg kommentiert. Können Sie sehen, was mit meinem Javscript unten los ist?

<?php
$_product    = $this->getProduct();
$_attributes = Mage::helper('core')->decorateArray($this->getAllowAttributes());
?>
<div id="caitlinVendors">
<?php if ($_product->isSaleable() && count($_attributes)):?>
    <dl>
    <?php foreach($_attributes as $_attribute){ ?>
                <div id="<?php echo $_attribute->getLabel() ?>Box" class="attributeBox">
                    <dt><label class="required"><em>*</em><?php echo $_attribute->getLabel() ?></label></dt>
                    <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>>
                        <div class="input-box">
                            <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select">
                                <option><?php echo $this->__('Choose an Option...') ?></option>
                              </select>
                          </div>
                    </dd>
                </div>

    <?php }?>
    <a href="#" id="vendorsButton" class="vendorsButtonOff">Show Vendors</a>
    <div class="clear"></div>

    </dl>
    </div>


    <script type="text/javascript">//Caitlin
    //dropdowns are initiated via configurable.js

    var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);


    var $j= jQuery.noConflict();
        $j("#vendorsButton").on("click", function(event){ //vendor button click event
            event.preventDefault();
            $j('#vendorBox').css('visibility','show'); //set vendor box to visible

            if ($j("#vendorBox").is(":hidden")) {
                $j("#vendorBox").slideDown("fast");
            } else {
                $j("#vendorBox").hide();
            }
        });




    $j('select').change(function() { //on changing the attribute input
        if ($j(this).find('option:selected')[0].text=='Choose an Option...')//see if there is a value in the dropdown
        { 
            $j('#vendorsButton').removeClass().addClass('vendorsButtonOff'); //Gray out the button and disable
            console.log('i still work');
        }
        else
            $j('#vendorsButton').removeClass().addClass('vendorsButtonOff'); //Enable and make it gold
    });


    </script>
<?php endif;?>
War es hilfreich?

Lösung

Versuchen Sie zunächst, den JQuery -Code zu kommentieren und zu prüfen, ob sich der Fehler reproduziert. Wenn dies der Fall ist, ist es nicht mit JQuery (Captain Offensichtlich) zu tun.
Wenn der Fehler nicht angezeigt wird, versuchen Sie, das zu platzieren jQuery.noConflict() Aussage am Ende der jquery.js Datei. Es besteht die Möglichkeit, dass die Konflikte auf der Seite höher erscheinen, bevor Sie anrufen noConflict.
Und anstatt die Variable zu entkadeln $j=jQuery.noConflict() benutz einfach jQuery statt '$ j'.
Zum Beispiel statt:

var $j= jQuery.noConflict();
$j('#id').hide();

benutz einfach:

jQuery('#id').hide();

Dies hat bei mir immer ohne Konflikte funktioniert.
Off -Thema (Art): Versuchen Sie, Prototypen für einfache Dinge zu verwenden, z. B. das Verstecken und Anzeigen von Elementen, Festlegen von Stilwerten. Es ist nicht nötig, JQuery für Dinge einzubeziehen, die Sie in einer Zeile mit Prototype tun können.

Andere Tipps

Ich bekomme diesen Fehler, wenn meine URL eine hat # Am Ende. Wahrscheinlich a <a href="#"> das nicht preventDefault().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top