TypeError Jquery(...)。function不是函数

时间:2016-01-26 17:35:11

标签: javascript jquery wordpress

我在调用一个让我完全难过的方法时遇到了问题。我在外部js类中有一组方法,用于WP主题的核心j之外的库。

(抱歉关于无休止的一行)

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();

我最终得到了错误:

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

在某个地方,我设法破坏了这段代码,但我并不确定。我已经将我的标题删除到了必要的脚本,没有任何原因导致错误。我目前的JQuery CDN是从谷歌cdn下载的标准。我受到了压力,我会得到这个问题,因为它无法解决方法。但是如果两个脚本都在那里(我已经记录了external.js方法以查看脚本没有被破坏),我就不知道它为什么会抛出这个错误。

该网站http://whatzbuzzing.com可以直接查看错误。作为一个wordpress发行版,我的印象是在所显示的两个文件之外出现了问题,因为它们根本没有被编辑过。

2 个答案:

答案 0 :(得分:0)

根据Chrome Networks面板中的请求顺序,您需要在jquery.min.js之前加载external.js。也许你可以在获取external.js之前尝试获取jquery.min.js?对不起,如果我错过了你的问题。

答案 1 :(得分: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' );

如果您是从主题中调用此主题,则可以使用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