2016-08-03 2 views
0

Работает над проектом MVC 5. Эта конкретная страница является частичной страницей (Razor), если это имеет значение.

Я пытаюсь использовать библиотеку jQuery ddchart. (http://kiersimmons.com/ddchart/index.html) я получаю эту ошибку ...

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

строка кода, что ошибка происходит на здесь:

$("#chart_div_static").ddBarChart({ 
     chartDataLink: "~/Scripts/plugins/ddchart/Chart_Data.js?1=10", 
     action: 'init', 
     xOddClass: "ui-state-active", 
     xEvenClass: "ui-state-default", 
     yOddClass: "ui-state-active", 
     yEvenClass: "ui-state-default", 
     xWrapperClass: "ui-widget-content", 
     chartWrapperClass: "ui-widget-content", 
     chartBarClass: "ui-state-focus ui-corner-top", 
     chartBarHoverClass: "ui-state-highlight", 
     callBeforeLoad: function() { $('#loading-Notification_static').fadeIn(0); }, 
     callAfterLoad: function() { $('#loading-Notification_static').stop().fadeOut(0); }, 
     tooltipSettings: { extraClass: "ui-widget ui-widget-content ui-corner-all" } 
    }); 

Я знаю, что функция существует и ссылка (для JS файл, содержащий эту функцию) помещается перед вызовом ddBarChart. FYI ссылка есть ....

<script src="~/Scripts/plugins/ddchart/jquery.ddchart.js"></script> 

В качестве теста: В подам jquery.ddchart.js я даже сделал функцию тест(), который просто выскакивает предупреждение. Я написал эту функцию на линии перед функцией ddBarChart. Когда я вызываю тестовую функцию, она работает нормально. Поэтому я знаю, что ссылка на внешний js-файл (jquery.ddchart.js) верна.

**** Обновление ****

FYI: Функция ddBarChart, во внешнем файле, начинается как ...

jQuery.fn.ddBarChart = function(options) { 
     function setupDrillDown(strID, intDelay, strH, strW, strL) { 
      $(strID+ "> .ddchart-chart-final").css("z-index","2"); 
       : 
       : 
     } 

     function aniDrillDown(strID,intDelay) { 
      $(strID+ " > .ddchart-chart-final > .ddchart-chart-wrapper-sub").animate({width: "100%",height: "100%",left: "0%"}, intDelay-500, function(){aniCleanUp(strID)}); 
     } 
       : 
       : 

**** Обновление Примечание *** * (Это частичная страница MVC 5 (бритва), если это имеет значение. Казалось, что я работаю, когда создаю обычную не-частичную страницу в другом проекте.)

Любые идеи, что это может быть? Благодаря!

+0

Это внутри '$ (document) .ready()'? И если бы вы попытались использовать '$ (window) .on (" load ", function() {}); вместо этого? – Santi

+0

Спасибо за ваш ответ @TylerRoper ... Это не в $ (документе) .ready() – WebDevGuy2

+0

Я попытался сменить код, чтобы поместить его в document.ready, но это тоже не сработало. Странно то, что моя тестовая функция (с простым предупреждением) работала отлично! Он находится в том же месте. (Кроме того, это частичная страница MVC 5 (бритва), если это имеет какое-то значение. Кажется, работает, когда я создал обычную не-частичную страницу в другом проекте.) – WebDevGuy2

ответ

1

Я столкнулся с такой проблемой, как раньше. Проблема заключалась в том, что библиотека jQuery включалась дважды.

Это произошло в следующем порядке:

  • Файл HTML загружен файл JQuery, определяющий объект JQuery.
  • HTML-файл, загруженный файл модуля, прикрепляя функцию jQuery.fn
  • Файл загружен HTML-файл JQuery, переопределение в объект JQuery.

После этого любые ссылки на jQuery будут на вновь определенный объект jQuery, который не имеет прикрепленной к нему функции плагина.

Это было бы согласуется с этим только при отсутствии частичного представления. Вы должны убедиться, что плагин включен только после того, как включен источник jQuery.

+0

Это очень интересно, потому что мой частичный вид использует более старую версию jQuery, чем «parent», но функция test() во внешнем файле работает, определенная непосредственно перед функцией ddBarChart. Я также попытался изменить ddBarChart на «регулярную» функцию, определенную как «function ddB arChart (options) {"а не" jQuery.fn.ddBarChart = function (options) {". Но, все тот же вопрос. – WebDevGuy2

+1

@ WebDevGuy2 Вы пытаетесь иметь две разные версии jQuery на одной и той же отображаемой странице? Поймите, что существует только один глобальный объект 'jQuery'. Скорее всего, когда вы вызываете 'ddBarChart', вы вызываете его на' более новой' версии, но вы подключили плагин к более старой версии. –

+0

Я думаю, что это может быть проблемой. Когда я делаю View Source на отображаемой странице, я вижу несколько ссылок на jQuery. Вы думаете, что так? Лучше ли переводить эти типы ссылок из частичных страниц и в родителя? – WebDevGuy2