2016-08-02 193 views
0

好吧,這可能是一個愚蠢的問題,但我會問。當您在滾動時通過頁面上的某個點時,我正試圖製作一個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

回答

3

您正在運行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