jquery - 未捕获的 TypeError : $(. ..).responsiveSlides 不是函数

标签 jquery templates joomla slideshow

我有一个 joomla 网站。我使用了一个模板来使用。 主页幻灯片不起作用。 >检查元素>控制台显示错误:

Uncaught TypeError: $(...).responsiveSlides is not a function

我相信它指的是我认为的这段代码:

slideshow.php:

<script>
// You can also use "$(window).load(function() {"
$(function () {
  $("#slider4").responsiveSlides({
    auto: true,
    pager: false,
    nav: true,
    speed: 500,
    namespace: "callbacks",
    before: function () {
      $('.events').append("<li>before event fired.</li>");
    },
    after: function () {
      $('.events').append("<li>after event fired.</li>");
    }
  });

});
</script>

<?php     
 $slide1    =   htmlspecialchars($this->params->get('slide1')); 
 $slide2    =   htmlspecialchars($this->params->get('slide2')); 
 $slide3    =   htmlspecialchars($this->params->get('slide3'));  
 $slide4    =   htmlspecialchars($this->params->get('slide4')); 
 $slide5    =   htmlspecialchars($this->params->get('slide5')); 
 $slide6    =   htmlspecialchars($this->params->get('slide6')); 
 $slide7    =   htmlspecialchars($this->params->get('slide7'));  
 $slide8    =   htmlspecialchars($this->params->get('slide8'));

 $NumberOfSlides    =   htmlspecialchars($this->params->get('NumberOfSlides'));
?> 


<div class="callbacks_container">
  <ul class="rslides" id="slider4">

    <?php if ($slide1 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide1); ?>" /><p class="caption"><?php echo ($slidedesc1); ?></p></li>
    <?php else : ?><li><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/slideshow/1.jpg" alt="1" /><p class="caption"><?php if ($this->params->get( 'slidedesc1' )) : ?><?php echo ($slidedesc1); ?><?php endif; ?></p></li><?php endif; ?>
    <?php if ($slide2 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide2); ?>" /><p class="caption"><?php echo ($slidedesc2); ?></p></li>
    <?php else : ?><li><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/slideshow/2.jpg" alt="2" /><p class="caption"><?php if ($this->params->get( 'slidedesc2' )) : ?><?php echo ($slidedesc2); ?><?php endif; ?></p></li><?php endif; ?>
    <?php if ($slide3 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide3); ?>" /><p class="caption"><?php echo ($slidedesc3); ?></p></li>
    <?php else : ?><li><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/slideshow/3.jpg" alt="3" /><p class="caption"><?php if ($this->params->get( 'slidedesc3' )) : ?><?php echo ($slidedesc3); ?><?php endif; ?></p></li><?php endif; ?>
    <?php if ($slide4 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide4); ?>" /><p class="caption"><?php echo ($slidedesc4); ?></p></li>
    <?php else : ?><li><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/slideshow/4.jpg" alt="4" /><p class="caption"><?php if ($this->params->get( 'slidedesc4' )) : ?><?php echo ($slidedesc4); ?><?php endif; ?></p></li><?php endif; ?>

    <?php if ($NumberOfSlides >= 5 ) : ?><?php if ($slide5 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide5); ?>" /><p class="caption"><?php echo ($slidedesc5); ?></p></li><?php endif; ?><?php endif; ?>
    <?php if ($NumberOfSlides >= 6 ) : ?><?php if ($slide6 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide6); ?>" /><p class="caption"><?php echo ($slidedesc6); ?></p></li><?php endif; ?><?php endif; ?>
    <?php if ($NumberOfSlides >= 7 ) : ?><?php if ($slide7 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide7); ?>" /><p class="caption"><?php echo ($slidedesc7); ?></p></li><?php endif; ?><?php endif; ?>
    <?php if ($NumberOfSlides >= 8 ) : ?><?php if ($slide8 != null ) : ?><li><img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($slide8); ?>" /><p class="caption"><?php echo ($slidedesc8); ?></p></li><?php endif; ?><?php endif; ?>

  </ul>
</div>

我认为这就是问题的根源。我对 jquery 不熟悉。我需要更改什么才能使其正常工作?

这是它应该引用的js函数:

responsiveslides.js:

/*! ResponsiveSlides.js v1.54
 * http://responsiveslides.com
 * http://viljamis.com
 *
 * Copyright (c) 2011-2012 @viljamis
 * Available under the MIT license
 */

/*jslint browser: true, sloppy: true, vars: true, plusplus: true, indent: 2      */

(function ($, window, i) {
  $.fn.responsiveSlides = function (options) {

// Default settings
var settings = $.extend({
  "auto": false,             // Boolean: Animate automatically, true or false
  "speed": 500,             // Integer: Speed of the transition, in milliseconds
  "timeout": 4000,          // Integer: Time between slide transitions, in milliseconds
  "pager": true,           // Boolean: Show pager, true or false
  "nav": true,             // Boolean: Show navigation, true or false
  "random": false,          // Boolean: Randomize the order of the slides, true or false
  "pause": true,           // Boolean: Pause on hover, true or false
  "pauseControls": true,    // Boolean: Pause when hovering controls, true or false
  "prevText": "Previous",   // String: Text for the "previous" button
  "nextText": "Next",       // String: Text for the "next" button
  "maxwidth": "",           // Integer: Max-width of the slideshow, in pixels
  "navContainer": "",       // Selector: Where auto generated controls should be appended to, default is after the <ul>
  "manualControls": "",     // Selector: Declare custom pager navigation
  "namespace": "rslides",   // String: change the default namespace used
  "before": $.noop,         // Function: Before callback
  "after": $.noop           // Function: After callback
}, options);

return this.each(function () {

  // Index for namespacing
  i++;

  var $this = $(this),

    // Local variables
    vendor,
    selectTab,
    startCycle,
    restartCycle,
    rotate,
    $tabs,

    // Helpers
    index = 0,
    $slide = $this.children(),
    length = $slide.size(),
    fadeTime = parseFloat(settings.speed),
    waitTime = parseFloat(settings.timeout),
    maxw = parseFloat(settings.maxwidth),

    // Namespacing
    namespace = settings.namespace,
    namespaceIdx = namespace + i,

    // Classes
    navClass = namespace + "_nav " + namespaceIdx + "_nav",
    activeClass = namespace + "_here",
    visibleClass = namespaceIdx + "_on",
    slideClassPrefix = namespaceIdx + "_s",

    // Pager
    $pager = $("<ul class='" + namespace + "_tabs " + namespaceIdx + "_tabs' />"),

    // Styles for visible and hidden slides
    visible = {"float": "left", "position": "relative", "opacity": 1, "zIndex": 2},
    hidden = {"float": "none", "position": "absolute", "opacity": 0, "zIndex": 1},

    // Detect transition support
    supportsTransitions = (function () {
      var docBody = document.body || document.documentElement;
      var styles = docBody.style;
      var prop = "transition";
      if (typeof styles[prop] === "string") {
        return true;
      }
      // Tests for vendor specific prop
      vendor = ["Moz", "Webkit", "Khtml", "O", "ms"];
      prop = prop.charAt(0).toUpperCase() + prop.substr(1);
      var i;
      for (i = 0; i < vendor.length; i++) {
        if (typeof styles[vendor[i] + prop] === "string") {
          return true;
        }
      }
      return false;
    })(),

    // Fading animation
    slideTo = function (idx) {
      settings.before(idx);
      // If CSS3 transitions are supported
      if (supportsTransitions) {
        $slide
          .removeClass(visibleClass)
          .css(hidden)
          .eq(idx)
          .addClass(visibleClass)
          .css(visible);
        index = idx;
        setTimeout(function () {
          settings.after(idx);
        }, fadeTime);
      // If not, use jQuery fallback
      } else {
        $slide
          .stop()
          .fadeOut(fadeTime, function () {
            $(this)
              .removeClass(visibleClass)
              .css(hidden)
              .css("opacity", 1);
          })
          .eq(idx)
          .fadeIn(fadeTime, function () {
            $(this)
              .addClass(visibleClass)
              .css(visible);
            settings.after(idx);
            index = idx;
          });
      }
    };

  // Random order
  if (settings.random) {
    $slide.sort(function () {
      return (Math.round(Math.random()) - 0.5);
    });
    $this
      .empty()
      .append($slide);
  }

  // Add ID's to each slide
  $slide.each(function (i) {
    this.id = slideClassPrefix + i;
  });

  // Add max-width and classes
  $this.addClass(namespace + " " + namespaceIdx);
  if (options && options.maxwidth) {
    $this.css("max-width", maxw);
  }

  // Hide all slides, then show first one
  $slide
    .hide()
    .css(hidden)
    .eq(0)
    .addClass(visibleClass)
    .css(visible)
    .show();

  // CSS transitions
  if (supportsTransitions) {
    $slide
      .show()
      .css({
        // -ms prefix isn't needed as IE10 uses prefix free version
        "-webkit-transition": "opacity " + fadeTime + "ms ease-in-out",
        "-moz-transition": "opacity " + fadeTime + "ms ease-in-out",
        "-o-transition": "opacity " + fadeTime + "ms ease-in-out",
        "transition": "opacity " + fadeTime + "ms ease-in-out"
      });
  }

  // Only run if there's more than one slide
  if ($slide.size() > 1) {

    // Make sure the timeout is at least 100ms longer than the fade
    if (waitTime < fadeTime + 100) {
      return;
    }

    // Pager
    if (settings.pager && !settings.manualControls) {
      var tabMarkup = [];
      $slide.each(function (i) {
        var n = i + 1;
        tabMarkup +=
          "<li>" +
          "<a href='#' class='" + slideClassPrefix + n + "'>" + n + "</a>" +
          "</li>";
      });
      $pager.append(tabMarkup);

      // Inject pager
      if (options.navContainer) {
        $(settings.navContainer).append($pager);
      } else {
        $this.after($pager);
      }
    }

    // Manual pager controls
    if (settings.manualControls) {
      $pager = $(settings.manualControls);
      $pager.addClass(namespace + "_tabs " + namespaceIdx + "_tabs");
    }

    // Add pager slide class prefixes
    if (settings.pager || settings.manualControls) {
      $pager.find('li').each(function (i) {
        $(this).addClass(slideClassPrefix + (i + 1));
      });
    }

    // If we have a pager, we need to set up the selectTab function
    if (settings.pager || settings.manualControls) {
      $tabs = $pager.find('a');

      // Select pager item
      selectTab = function (idx) {
        $tabs
          .closest("li")
          .removeClass(activeClass)
          .eq(idx)
          .addClass(activeClass);
      };
    }

    // Auto cycle
    if (settings.auto) {

      startCycle = function () {
        rotate = setInterval(function () {

          // Clear the event queue
          $slide.stop(true, true);

          var idx = index + 1 < length ? index + 1 : 0;

          // Remove active state and set new if pager is set
          if (settings.pager || settings.manualControls) {
            selectTab(idx);
          }

          slideTo(idx);
        }, waitTime);
      };

      // Init cycle
      startCycle();
    }

    // Restarting cycle
    restartCycle = function () {
      if (settings.auto) {
        // Stop
        clearInterval(rotate);
        // Restart
        startCycle();
      }
    };

    // Pause on hover
    if (settings.pause) {
      $this.hover(function () {
        clearInterval(rotate);
      }, function () {
        restartCycle();
      });
    }

    // Pager click event handler
    if (settings.pager || settings.manualControls) {
      $tabs.bind("click", function (e) {
        e.preventDefault();

        if (!settings.pauseControls) {
          restartCycle();
        }

        // Get index of clicked tab
        var idx = $tabs.index(this);

        // Break if element is already active or currently animated
        if (index === idx || $("." + visibleClass).queue('fx').length) {
          return;
        }

        // Remove active state from old tab and set new one
        selectTab(idx);

        // Do the animation
        slideTo(idx);
      })
        .eq(0)
        .closest("li")
        .addClass(activeClass);

      // Pause when hovering pager
      if (settings.pauseControls) {
        $tabs.hover(function () {
          clearInterval(rotate);
        }, function () {
          restartCycle();
        });
      }
    }

    // Navigation
    if (settings.nav) {
      var navMarkup =
        "<a href='#' class='" + navClass + " prev'>" + settings.prevText + "</a>" +
        "<a href='#' class='" + navClass + " next'>" + settings.nextText + "</a>";

      // Inject navigation
      if (options.navContainer) {
        $(settings.navContainer).append(navMarkup);
      } else {
        $this.after(navMarkup);
      }

      var $trigger = $("." + namespaceIdx + "_nav"),
        $prev = $trigger.filter(".prev");

      // Click event handler
      $trigger.bind("click", function (e) {
        e.preventDefault();

        var $visibleClass = $("." + visibleClass);

        // Prevent clicking if currently animated
        if ($visibleClass.queue('fx').length) {
          return;
        }

        //  Adds active class during slide animation
        //  $(this)
        //    .addClass(namespace + "_active")
        //    .delay(fadeTime)
        //    .queue(function (next) {
        //      $(this).removeClass(namespace + "_active");
        //      next();
        //  });

        // Determine where to slide
        var idx = $slide.index($visibleClass),
          prevIdx = idx - 1,
          nextIdx = idx + 1 < length ? index + 1 : 0;

        // Go to slide
        slideTo($(this)[0] === $prev[0] ? prevIdx : nextIdx);
        if (settings.pager || settings.manualControls) {
          selectTab($(this)[0] === $prev[0] ? prevIdx : nextIdx);
        }

        if (!settings.pauseControls) {
          restartCycle();
        }
      });

      // Pause when hovering navigation
      if (settings.pauseControls) {
        $trigger.hover(function () {
          clearInterval(rotate);
        }, function () {
          restartCycle();
        });
      }
    }

  }

  // Max-width fallback
  if (typeof document.body.style.maxWidth === "undefined" && options.maxwidth) {
    var widthSupport = function () {
      $this.css("width", "100%");
      if ($this.width() > maxw) {
        $this.css("width", maxw);
      }
    };

    // Init fallback
    widthSupport();
    $(window).bind("resize", function () {
      widthSupport();
    });
  }

});

  };
})(jQuery, this, 0);

最佳答案

而不是

<script>
// You can also use "$(window).load(function() {"
$(function () {

你可以使用

<script>
// You can also use "$(window).load(function() {"
jQuery(function ($) {

希望这有帮助

关于jquery - 未捕获的 TypeError : $(. ..).responsiveSlides 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34454734/

相关文章:

javascript - 按索引平均锯齿状数组

java - 从外部类路径/jar 加载 Freemarker 模板

c++ - GCC 向依赖默认构造函数的模板化类中的静态数据成员给出 "undefined reference"错误

php - 我应该使用/编写模板词法分析器吗

jquery - 乔姆拉! 1.5.26 从 JEditor 或 Javascript 初始化 TinyMCE

php - mysql查询语法错误

javascript - 生成的复选框将在 jquery 中的行中找到第一个 td 的值

javascript - 仅在一个表格行内设置单选按钮标签的样式

joomla - 如何在 joomla 2.5 和 3 中禁用注册电子邮件

javascript - keydown 上的 jQuery 下拉 ajax 搜索是 'one step behind'