问题描述

我知道 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。