jquery - изменение атрибута объекта после создания экземпляра в document.ready () - PullRequest
1 голос
/ 07 ноября 2011

Я использую плагин bxSlider (слайдер, похожий на jcarousel) в пользовательском магазине Magento.

Пока ползунок настантирован на documentmet.ready () (в разделе html-заголовка) следующим образом:

jQuery('#slider2').bxSlider({
    pause: 4000,
    auto: true,
    autoControls: true,
    displaySlideQty: 4,
    moveSlideQty: 1
});

Я хочу изменить автоматический атрибут на false в коде php, если количество элементов ползунка меньше 5. Я пытался изменить его с помощью:

<?php
    // slider items count
    $prom_count = $this->getPromotionalProducts()->count();;
?>
<?php if($prom_count<5): ?>
    <script>
        $("#slider2").attr('auto','false');    
    </script>
<?php endif; ?> 

но это не работает, поэтому я не уверен, что таким образом можно изменить атрибут объектов, созданных на dom ready. кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

Метод attr из библиотеки jQuery работает с атрибутами для HTML-элементов:

<img src="..." alt="...">

В этом случае src и alt являются "атрибутами".

bxSlider настраивается путем предоставления функции bxSlider массива.Вы не можете изменить этот массив после того, как он был передан в функцию.

То, что вы можете сделать, чтобы переключить авто-шоу, это использовать функцию stopShow() bxSlider.Чтобы, вероятно, сделать это, вам нужно сохранить созданный вами экземпляр bxSlider:

var slider = jQuery('#slider2').bxSlider({
   ...
});

Таким образом, вы можете затем вызвать функцию для этого объекта:

slider.stopShow();

Делая это сPHP и JavaScript в смешанном виде (как вы и предлагали) уродливы и их следует избегать.

Вместо этого вам следует использовать решение только для JavaScript:

var slider = jQuery('#slider2').bxSlider({
   auto: true,
   ...
});
if (slider.getSlideCount() < 5){
  slider.stopShow();
}

Обратите внимание, что getSlideCount()возвращает количество слайдов, которое не гарантируется как количество изображений в галерее!Количество одновременно отображаемых слайдов можно установить с помощью атрибута displaySlideQty.Однако значение по умолчанию равно 1.


Появляется ошибка, из-за которой startShow и stopShow -функции не работают: https://github.com/wandoledzep/bxslider/pull/43

Как грязныйОбходной путь, вы можете сделать что-то вроде этого:

<?php
    echo "<script type=\"text/javascript\">
        jQuery('#slider2').bxSlider({
            pause: 4000,
            autoControls: true,
            displaySlideQty: 4,";
    if($prom_count >= 5) echo "auto: true,";
    echo "moveSlideQty: 1
        });
    </script>";
?>
1 голос
/ 07 ноября 2011

Похоже, для этого нет функции API .Возможно, конфигурация будет загружена снова, если вы используете reloadShow ().Если это не поможет, вы должны прочитать исходный код .

0 голосов
/ 07 ноября 2011

Это установит атрибут auto для самого элемента, а не для автоматической опции плагина. Похоже, что плагин не может изменять параметры после того, как вы его создали, хотя я только взглянул на него.

Не можете ли вы установить правильное значение auto при запуске плагина, поставив сначала код php?

...