V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
miniwade514
V2EX  ›  JavaScript

使用 jquery.colorbox 时遇到的作用域问题,虽然解决了但没弄明白

  •  
  •   miniwade514 · 2014-02-07 01:17:33 +08:00 · 4635 次点击
    这是一个创建于 4036 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我感到奇怪, $ 和 window.$ 不是同一个东西?
    <script src="jquery.js"></script>
    <script src="jquery.colorbox.js"></script>
    <script> window.colorbox_css_url = "path/to/colorbox.css"; </script>
    <script src="my.js"></script>
    上面的 HTML 代码都是在 PHP 里面 echo 出来的。
    第3行可能和问题无关,但是我不确定,所以也贴出来了。写第3行是因为:
    我要在 my.js 里面把 <link href="path/to/colorbox.css"/> 添加到 head 里,
    但是用相对路径就出错,我就把绝对路径用 PHP 输出在 HTML 里面了,然后绑在 window 上。
    //------------------------
    '注释颜色太淡了。。。';
    '一开始 my.js 大概是这样的,然后控制台就返回了错误如下:';
    "Uncaught TypeError: Object [object Object] has no method 'colorbox' ";
    //------------------------
    ;(function( window ){
    $(function(){
    $('.colorbox-images').colorbox();
    });
    })( window );
    view raw 1_my.错了.js hosted with ❤ by GitHub
    //----------------------------
    '后来我把 my.js 改成了这样,就没报错了';
    //----------------------------
    ;(function( window, $ ){
    $(function(){
    $('.colorbox-images').colorbox();
    });
    })( window, $ );
    view raw 2_my.对了.js hosted with ❤ by GitHub
    11 条回复    1970-01-01 08:00:00 +08:00
    emric
        1
    emric  
       2014-02-07 04:00:40 +08:00
    例一传进去的对象并不包括$.
    $在window身上但没有在当前作用域声明, 使用$前应该`var $=window.jquery`.
    ---
    组织了语言几分钟, 好像还是不能够很清晰的表达出来... (泪)
    bombless
        2
    bombless  
       2014-02-07 09:29:23 +08:00
    目测楼主是两次引入一个全局的$变量…
    按这个思路检查一下吧…
    sapjax
        3
    sapjax  
       2014-02-07 11:47:48 +08:00
    目测楼主是在my.js中的某个位置(你调用colorbox()之前),重新给$变量赋值了,否则不应该出现这种情况
    kevinkim
        4
    kevinkim  
       2014-02-07 13:18:34 +08:00
    @emric +1
    lz传递的是window对象而已,并没有$,如果非得只传个window,那么里面请用window.$(function(){...})
    zzNucker
        5
    zzNucker  
       2014-02-07 17:39:09 +08:00
    你应该是更改过$变量了,否则jquery应该是会把$主动写到全局变量里去的。
    miniwade514
        6
    miniwade514  
    OP
       2014-02-08 11:27:18 +08:00 via Android
    @sapjax my.js里面没有对$赋值,就直接拿来用的。但是这之前引用了jquery.colorbox.js ,它只是插件,应该不会给$ 赋值啊。
    miniwade514
        7
    miniwade514  
    OP
       2014-02-08 11:37:11 +08:00 via Android
    @emric 我以为全局的 $ 不用声明啊,那两段代码的区别就是有没有把全局的 $ 传进去,全局的我以为不传也能用啊。。
    我语言组织得也很吃力。。-_-#
    sapjax
        8
    sapjax  
       2014-02-08 14:35:06 +08:00
    @miniwade514 如果是在my.js外改写了$的话,那么你传全局的$进去,也没有用的,所以从你的代码片段来看,一定是在my.js中对$进行了赋值
    miniwade514
        9
    miniwade514  
    OP
       2014-02-08 22:14:57 +08:00
    sapjax
        10
    sapjax  
       2014-02-09 09:49:49 +08:00
    @miniwade514 额,那就不清楚了,按理说jquery.colorbox.js引入之后,$.fn就有了colorbox方法,如果后面没改写的话,应该不会出现你的报错。
    或者在jquery.colorbox.js引入到页面ready这段时间,$可能被改写,colorbox方法可能被删除,但是这种情况,你传$进去,也是解决不了的啊...
    FrankFang128
        11
    FrankFang128  
       2014-02-09 12:38:37 +08:00 via Android
    你 console.log($===window.$)不就知道了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2518 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 15:49 · PVG 23:49 · LAX 07:49 · JFK 10:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.