Question

Je travaille dans le bloc d'options configurables sur la page du produit et l'insertion d'un droit de javascript dans le fond de celui-ci. Je n'avais pas eu de problèmes, mais je reçois soudainement une erreur dans la console: « Uncaught TypeError: Impossible de lire la propriété « config » undefined ». Je suppose que son erreur de conflit. Je me suis déplacé autour de l'initialisation de l'objet prototype et de commenter les choses en vain. Pouvez-vous voir ce qui ne va pas avec mon javscript au fond?

<?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;?>
Était-ce utile?

La solution

Tout d'abord essayer de commenter le code jQuery et voir si les reproduit d'erreur. Si elle ne puis il est pas lié à jQuery (capitaine évident).
Si l'erreur ne semble pas, essayez de mettre la déclaration de jQuery.noConflict() à la fin du fichier jquery.js. Il y a une chance que les conflits apparaissent plus élevés dans la page avant que vous appelez noConflict.
Et au lieu de decalring la $j=jQuery.noConflict() variable il suffit d'utiliser jQuery au lieu de '$ j.
Par exemple au lieu de:

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

juste utilisation:

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

a toujours travaillé pour moi sans aucun conflit.
Hors sujet (type de): Essayez d'utiliser le prototype pour des choses simples, comme des éléments masquage et d'affichage, la définition des valeurs de style. Il n'y a pas besoin d'impliquer jQuery pour des choses que vous pouvez faire en une ligne avec un prototype.

Autres conseils

J'obtiens cette erreur lorsque mon URL a une # à la fin. Probablement un <a href="#"> qui ne fonctionne pas preventDefault().

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top