脚本不能正常工作(但在其他站点上正常工作)

问题描述:

好吧,这可能是一个愚蠢的问题,但我会问。当您在滚动时通过页面上的某个点时,我正试图制作一个div。我有这个脚本:脚本不能正常工作(但在其他站点上正常工作)

<script type="text/javascript"> 
$(document).ready(function() { 
     var s = $("#sticker"); 
     var pos = s.position();      
     $(window).scroll(function() { 
     var windowpos = $(window).scrollTop(); 
     if (windowpos >= pos.top + 335) { 
      s.addClass("stick"); 
     } else { 
      s.removeClass("stick"); 
     } 
    }); 
}); 
</script> 

哪一个在我的网站上正常工作。但现在我正在一个新网站上尝试它。每当我在控制台日志中发现错误时说:TypeError: $ is not a function而当我查看代码中的错误时,它突出显示了$(document).ready(function() {部分。

如果我删除了$(document).ready部分和});它告诉我var s = $("#sticker");部分是$ is not a function

我已经试过

<script type="text/javascript"> 
jQuery(document).ready(function() { 
     var s = $("#sticker"); 
     var pos = s.position();      
     $(window).scroll(function() { 
     var windowpos = $(window).scrollTop(); 
     if (windowpos >= pos.top + 335) { 
      s.addClass("stick"); 
     } else { 
      s.removeClass("stick"); 
     } 
    }); 
}); 
</script> 

然后跳过(document).ready一部分,但它再次告​​诉我,我的var部分不是功能。

如果我删除脚本,我没有任何控制台日志消息。可能是什么问题呢?我试着把代码放在headerfooter甚至在<div id="sticker">...</div>之前。似乎没有任何工作。该脚本完美地在另一个站点上运行...

+1

试试这样说:'jQuery的(文件)。就绪(函数($){'(*注意' $'*)听起来有点像'noConflict'模式 – eisbehr

+1

可能很明显,但是您的页面中包含JQuery并可用? – ste2425

+0

@ ste2425,是的,所有其他jQuery代码都能正常工作,在同一页上工作正常... – Steggie

您正在运行noConfilct模式中的jQuery。这意味着,jQuery仅适用于jQuery,不适用于$。您可以使用ready stateIIFE包装您的代码,以便通过$访问jQuery。

就绪状态:

jQuery(document).ready(function($) { 
    // access jQuery by '$' inside 
}); 

// this is a shorthand for the above '.ready' creation 
jQuery(function($) { 
    // access jQuery by '$' inside 
}); 

IIFE:

(function($) { 
    // access jQuery by '$' inside 
})(jQuery); 
+0

感谢您的解答。为什么我没有在我的其他任何网站上遇到同样的问题?它可能是这段代码吗? '//制作jQuery的谷歌API 功能modify_jquery(){ 如果{// 注释掉接下来的两行要加载的jQuery的本地副本 wp_deregister_script( 'jQuery的')(is_admin()!); wp_register_script('jquery','http://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js',false,'2.2.4'); wp_enqueue_script('jquery'); } } add_action('init','modify_jquery');' – Steggie

+0

一般而言'noConflict'模式只是用'jQuery.noConflict();'盯着。我不知道'wp_register_script'函数是如何工作的,但它可能是。如果你想再次注册jQuery到'$',你可以像'window。$ = jQuery;'那样做,但是要记住,其他脚本使用'$'可能会变成其他问题。 。如果有什么东西把jQuery放在'noConflict'模式下,或者重新分配'$',那么会有一个原因... – eisbehr

+0

好吧,我现在就离开它。我不想搞乱其他脚本。再次感谢。 – Steggie