直到最近,我一直在使用jQuery和YUI并没有问题。有时,在YUI按钮的回调中,$
将被其他一些功能遮蔽(点击查看大版本):
对于我的生活,我无法弄清楚为什么会发生这种情况。是的,我知道我可以安全使用jQuery
或window.$
到处而不只是$
,但这只是一种解决方法,而不是实际修复。
在运行时,我如何找到这个$
冒名顶替者的来源? - 例如找到它声明的位置,以及为什么它在我的流血范围内。
事实证明,这种行为很容易在Stack Overflow上重现(至少在Chrome和Firefox 4中),因为SO使用jQuery(再次点击查看完整尺寸):
我只能将$
推断为
function () {
return document.getElementById.apply(document, arguments)
}
必须来自控制台本身!
with
再次罢工。
Chromium bug:http://code.google.com/p/chromium/issues/detail?id=70969
答案 0 :(得分:2)
我打赌在IE中不会发生这种情况?这是我能找到的唯一提示:
http://davidwalsh.name/dollar-functions
http://dam5s.tumblr.com/post/3079779011/bug-in-chromes-javascript-console
Chrome / Firefox / Safari中的某种错误。
答案 1 :(得分:2)
这是尝试的东西。 Firebug的调试器显示了范围内可用的所有变量,在您的示例中,它显然不是本地范围,并且由于您已经测试了窗口,因此它也不是全局的。$。因此,(?)是一个闭包变量(应该在同一个文件中)。
附带的屏幕截图显示了可用的闭包范围
该示例显示$ .each中的数据可用作闭包变量。同样,根据我的理论,你应该能够通过在页面上查找$的实例来找到罪魁祸首,因为闭包是通过词法定义的。也许有一个自我调用函数传入$ jquery插件。
答案 2 :(得分:0)
使用监视表达式......
设置一个检查$是否正确的函数,可能是jQueryCheck(),如果不正确则设置警告。
function jQueryCheck(){ 如果(!$。过滤器) 警报( 'WTF'); }
在您预计代码中出现问题之前,在某个步骤添加断点。
添加一个运行jQueryCheck()的监视表达式。
点击断点,然后继续点击下一步。当变量变为无效时,将弹出警报,然后您将在更改发生后进入该行。
以下是我用来测试的代码
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script>
function invalid(){
/* set breakpoint on loop below
click invalid button
add watch expression jQueryCheck()
click nextstep repeatedly until wtf alert
*/
for(var i=0; i<100; i++){
if(i == 10)
$ = 10;
}
}
function valid(){
$ = jQuery;
}
function jQueryCheck(){
if(!$.filter)
alert('wtf');
}
</script>
<input type="button" onclick="valid()" value="run valid">
<input type="button" onclick="invalid()" value="run invaid">
答案 3 :(得分:0)
您可以尝试使用jquery.noConflict http://api.jquery.com/jQuery.noConflict