0

私は次のスクリプトを持っていますが、#slider のないページに移動すると、その下にあるコードが壊れます。#slider がページ上にあるかどうかを確認します。このエラーが発生しています。キャッチされていない TypeError: オブジェクト [オブジェクト オブジェクト] にメソッド 'slitslider' がありません

このセクションを指すslitslider = $( '#slider' ).slitslider( {

(function ($) {
  if ($('#slider')) {
    var Page = (function () {
      var $navArrows = $('#nav-arrows'),
        $nav = $('#nav-dots > span'),
        slitslider = $('#slider').slitslider({
          autoplay: true,
          onBeforeChange: function (slide, pos) {

            /**
             * THIS SECTION MANAGES THE TRIANGLE COLORS EVERY TIME THE SLIDER BACKGROUND CHANGES SO DOES THE TRIANGLE.
             */
            //get the colors of each slide
            //and set it that color to the bottom-triangle.
            var newpos = pos;
            ++newpos;
            var triangleColor = $('.bg-' + newpos + ' .sl-slide-inner').css('backgroundColor');
            $('.expertise-triangle').css('border-color', triangleColor + ' transparent transparent transparent');
            /**
             * THIS SECTION HANDLES THE DOT NAVIGATIONS ON TOP OF THE TRIANGLES.
             */

            $nav.removeClass('nav-dot-current');
            $nav.eq(pos).addClass('nav-dot-current');
          }
        }),
        init = function () {
          initEvents();
        },
        initEvents = function () {
          // add navigation events
          $navArrows.children(':last').on('click', function () {
            slitslider.next();
            return false;
          });
          $navArrows.children(':first').on('click', function () {
            slitslider.previous();
            return false;
          });
          $nav.each(function (i) {
            $(this).on('click', function (event) {
              var $dot = $(this);
              if (!slitslider.isActive()) {
                $nav.removeClass('nav-dot-current');
                $dot.addClass('nav-dot-current');
              }
              slitslider.jump(i + 1);
              return false;
            });
          });
        };
      return {
        init: init
      };
    })();
    Page.init();
  } else {
    return;
  }
})(jQuery);
4

1 に答える 1

1

実際には、dom-element が呼び出されている可能性がありますが#slider、そのページに対応するスリットスライダー プラグインが含まれていません。$()また、常に配列を返し、空の配列 (一致がない場合) も真であるため、配列の長さを確認する必要があります。そのため、エラーObject [object Object](スライダー要素) has no method 'slitslider'(slitslider 関数がありません) が発生します。

if($('#slider').length && $().slitslider )それを防ぐためにチェックが必要です。

于 2012-11-19T14:57:30.483 に答える