問題描述

我知道 jQuery 是加載的,因為我可以切換 $為’jQuery’,並且所有的行為都按預期,但如果我無法解決這個問題,這將是一個凌亂的腳本

這個腳本:

jQuery(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })
});

產生錯誤 $ is not a function

這個腳本:

jQuery(document).ready(function(){
    jQuery("ul.vimeo_desc_feed li a").click(function(){
        alert(jQuery(this).attr('href'));
        return false;
    })
});

工作正常。

最佳解決方案

您可以將 JavaScript 包裝在 self-invoking 功能中,然後將 jQuery 作為參數傳遞給 $作為本地變量名稱。例如:

(function($) {
  $(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
      alert($(this).attr('href'));
      return false;
    })
 });
}(jQuery));

應按預期工作。

如果我記得正確的 WP-supplied 版本的 jQuery(如果您使用 wp_enqueue_script('jquery')的話),立即將 jQuery 放在 no-conflict 中,導致 $未定義。

次佳解決方案

你幾乎在那裏

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});

你必須將 jQuery 作為 $函數的引用傳遞給你的方法,否則它將不起作用。如果你剛剛把第一個 function()調用一個 $,就像上面那樣,事情會很好。

第三種解決方案

將函數傳遞給 jQuery 是 $(document).ready(...)的縮寫,然後通過將 $作為回調的第一個參數,在該回調中創建一個 jQuery 的別名:

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

您可以看到該 here 的文檔。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。