2016-01-26 4 views
0

У меня возникла проблема с вызовом метода, который полностью меня превзошел. У меня есть набор методов во внешнем js-классе, который используется для библиотек вне основного js для темы WP.TypeError JQuery (...). Функция не является функцией

(К сожалению О нескончаемая линия)

external.js

(function(a){ 
    var b=0;a.fn.mobileMenu=function(c){function e(a){return a.is("ul, ol")}function f(){return a(window).width()<d.switchWidth}function g(c){if(c.attr("id")){return a("#mobileMenu_"+c.attr("id")).length>0}else{b++;c.attr("id","mm"+b);return a("#mobileMenu_mm"+b).length>0}}function h(a){if(a.val()!==null){document.location.href=a.val()}}function j(b){b.css("display","none");a("#mobileMenu_"+b.attr("id")).show()}function k(b){b.css("display","");a("#mobileMenu_"+b.attr("id")).hide()}function l(b){if(e(b)){var c='<div class="td_mobile_menu_wrap"><select id="mobileMenu_'+b.attr("id")+'" class="mobileMenu">';c+='<option value="">'+d.topOptionText+"</option>";b.find("li").each(function(){var b="";var e=a(this).parents("ul, ol").length;for(i=1;i<e;i++){b+=d.indentString}var f=a(this).find("a:first-child").attr("href");var g=b+a(this).clone().children("ul, ol").remove().end().text();c+='<option value="'+f+'">'+g+"</option>"});c+="</select></div>";b.parent().append(c);a("#mobileMenu_"+b.attr("id")).change(function(){h(a(this))});j(b)}else{alert("mobileMenu will only work with UL or OL elements!")}}function m(a){if(f()&&!g(a)){l(a)}else if(f()&&g(a)){j(a)}else if(!f()&&g(a)){k(a)}}var d={switchWidth:td_switch_width_normal,topOptionText:"Menu",indentString:"-"};return this.each(function(){if(c){a.extend(d,c)}var b=a(this);a(window).resize(function(){m(b)});m(b)})}})(jQuery); 

И тогда ядро ​​

site.js

jQuery('#td-top-menu .sf-menu').mobileMenu(); 

и я в конечном U р с ошибкой:

Uncaught TypeError: jQuery(...).mobileMenu is not a function 

Где-то вдоль линии, я уже успел сломать этот код, и все же я не действительно уверен. Я разделил свой заголовок только на необходимые сценарии, и ничто не вызывает ошибки. Мой текущий JQuery CDN является стандартным загруженным из Google cdn. Я был под впечатлением, что я получу эту проблему, потому что он не может решить этот метод. Но если оба скрипта есть (я зарегистрировал метод external.js, чтобы увидеть, что скрипт не сломан), я не понимаю, почему он выбрасывает эту ошибку.

Сайт http://whatzbuzzing.com, чтобы увидеть эту проблему из первых рук. В качестве распространения wordpress у меня создалось впечатление, что что-то пошло не так, как показано в двух файлах, потому что они вообще не редактировались.

+1

Похоже, вы не загружая файлы в правильном порядке. 'external.js' должен быть загружен до' site.js'. –

+0

Вот что я подумал, и я переключил заказ, но безрезультатно. В консоли что-то в external.js регистрируется до site.js. –

ответ

0

В соответствии с порядком запросов на панели Chrome Networks вы загружаете external.js перед jquery.min.js. Может быть, вы можете попробовать получить jquery.min.js перед извлечением внешних.js? Извините, если я пропустил что-либо в вашем вопросе.

+0

В заголовке есть два разных сценария jquery, и один из них загружается перед двумя другими сценариями (ни один из внутренних скриптов не прерывается перед ошибкой) –

0

Это происходит, когда загружаются несколько файлов jquery, а не очень необычная вещь на сайте wordpress.

в вашем случае проблема здесь

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.0.min.js"></script> 

JQuery поставляется в комплекте с WordPress, все, что вам нужно сделать, это правильно епдиеие скрипт с JQuery как зависимость

function enqueue_my_external_script() { 
    wp_enqueue_script('externaljs', '//example.com/path/to/external.js', array('jquery')); 
} 

add_action('wp_enqueue_scripts', 'enqueue_my_external_script'); 

, если вы» re call this from the theme, вы можете использовать get_template_directory_uri, чтобы получить адрес справочника темы, подобный этому

function enqueue_my_external_script() { 
    wp_enqueue_script('externaljs', get_template_directory_uri() . '/path/to/external.js', array('jquery')); 
} 

add_action('wp_enqueue_scripts', 'enqueue_my_external_script'); 

wp_enqueue_script function

wp_enqueue_scripts action hook

Смежные вопросы