Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery.noConflict()之后访问jQuery;-没有名称空间_Javascript_Jquery - Fatal编程技术网

Javascript 如何在jQuery.noConflict()之后访问jQuery;-没有名称空间

Javascript 如何在jQuery.noConflict()之后访问jQuery;-没有名称空间,javascript,jquery,Javascript,Jquery,我现在有大麻烦了。我们有一个巨大的JS库,我需要维护。它在内部使用jQuery 1.6.2。 我们安装库的客户端使用jQuery 1.3.4和fancybox覆盖插件。 加载这两个后,他只需输入一个 jQuery.noConflict(); 但是没有将jQuery保存到变量(名称空间) 现在我需要访问他的fancybox,但是如果我使用 $.fancybox({...}) 或 在这两种情况下,我都得到一个“不是方法错误” 我可以在本地机器上复制错误,如果没有jQuery.noConflict

我现在有大麻烦了。我们有一个巨大的JS库,我需要维护。它在内部使用jQuery 1.6.2。 我们安装库的客户端使用jQuery 1.3.4和fancybox覆盖插件。 加载这两个后,他只需输入一个

jQuery.noConflict();
但是没有将jQuery保存到变量(名称空间)

现在我需要访问他的fancybox,但是如果我使用

$.fancybox({...})

在这两种情况下,我都得到一个“不是方法错误”

我可以在本地机器上复制错误,如果没有jQuery.noConflict(),错误就不会出现;声明

我们也在使用jQuery进行无冲突操作,但我们将其保存到另一个变量,即

jq162 = jQuery.noConflict();
问题是客户当然不愿意更改任何代码。 在这个语句之后和加载1.6.2之后,我有没有办法访问他的jQuery/Fancy

先谢谢你

更新

脚本按以下顺序加载:

//客户

  • jquery 1.4.2

  • jquery fancybox

  • jQuery.noConflict()

  • jQuery 1.2.6似乎是Liferay所必需的

  • //现在我的图书馆来了

  • jQuery 1.6.2

  • 我的剧本

  • 我知道,如果我们可以将步骤3更改为
    $jq=jQuery.noConflict()它会起作用,但现在这不受我的影响

    在6。MyScript我需要从2访问fancybox


    有什么想法吗?

    应该没问题。您必须在客户端脚本之后加载脚本(如果您首先加载脚本,则不会有任何问题,jquery是命名空间的,客户端版本将与插件一起位于
    jquery

    因此,在加载脚本之前,只需为其
    jQuery
    对象命名名称:

    <script>
        jq132 = jQuery;
    </script>
    <script src="yourScripts"></script>
    <script>
        jq162 = jQuery.noConflict();
        console.log(jq132.fancybox);
    </script>
    
    
    jq132=jQuery;
    jq162=jQuery.noConflict();
    console.log(jq132.fancybox);
    
    更新

    根据你的更新,你想做的是不可能的。不再有对jQuery/插件实例的可访问引用(除非fancybox意外泄漏了一个全局引用,对此我深表怀疑)。我不知道fancybox,尽管它的功能可能不是特定于实例的。因此,将fancybox重新连接到您的jquery版本是可能的,它将能够执行所有必要的操作。然而,我所说的关于参考文献的话仍然是正确的

    显然,添加一些您建议的字符(或其他类似的方式)可以解决问题。但如果这是不可能的,那么你的客户将不得不意识到这一点。如果你简单地要求他们在相同的条件下访问自己的插件,也就是说,不改变代码,这就足够证明了


    他们可能应该对整个项目进行长期而艰苦的思考。必须加载同一产品的三个不同版本是一种迹象,表明某些东西非常非常错误。

    非常好的主意。不幸的是,这并不是那么容易,因为客户端已经加载了2个不同的jQuery版本,1.4.2和1.2.6,这是liferay所需要的。在这两者之间,他调用“jQuery.noConflict();”,但不使用名称空间。然后我来了:)@frankblizzard,我不明白。您现在提到了四个版本。您能否澄清加载的确切内容以及顺序。好吧,没关系,最终客户能够为他的jquery命名,case closed。
    <script>
        jq132 = jQuery;
    </script>
    <script src="yourScripts"></script>
    <script>
        jq162 = jQuery.noConflict();
        console.log(jq132.fancybox);
    </script>