Javascript $(“Test”在Safari中成为对象而不是jQuery
除了Ipad、Iphone或Safari for Windows中的Safari之外,我的javascript可以在大多数浏览器上运行 LobbyMenuGames成为桌面浏览器IE、Firefox和Chrome上的jQuery对象。我收到这个信息 但如果我尝试在Safari中打开,我会收到以下消息 问题在于Safari过早地触发了$(document).ready(function()),但我不确定。如果在onclick事件中再次声明该变量,则可以将其设置为jQuery对象 您可以通过在iphone上转到来复制相同的错误 这是一个已删除额外代码的简化代码:Javascript $(“Test”在Safari中成为对象而不是jQuery,javascript,jquery,safari,Javascript,Jquery,Safari,除了Ipad、Iphone或Safari for Windows中的Safari之外,我的javascript可以在大多数浏览器上运行 LobbyMenuGames成为桌面浏览器IE、Firefox和Chrome上的jQuery对象。我收到这个信息 但如果我尝试在Safari中打开,我会收到以下消息 问题在于Safari过早地触发了$(document).ready(function()),但我不确定。如果在onclick事件中再次声明该变量,则可以将其设置为jQuery对象 您可以通过在i
var LobbyMenuGames; // Global Variable
$(document).ready(function ()
{
if (LobbyMenuGames == null)
LobbyMenuGames = $("#LobbyMenuGames"); // <-- This becomes an Object instead of jQuery object
TestIsObj("OnReady After");
});
function TestIsObj(loc)
{
var nl = "\n";
var s = loc + nl;
if (LobbyMenuGames instanceof jQuery)
s = s + " IS jQuery" + nl;
else
s = s + " NOT jQuery" + nl;
if (LobbyMenuGames instanceof Object)
s = s + " IS Object" + nl;
else
s = s + " NOT Object" + nl;
alert(s);
}
var-LobbyMenuGames;//全局变量
$(文档).ready(函数()
{
if(LobbyMenuGames==null)
LobbyMenuGames=$(“#LobbyMenuGames”)//null
是Javascript中的对象,但您的初始值实际上是未定义的。这种将未定义的视为匹配的null
的行为可能是特定于浏览器的
请尝试更简单的!LobbyMenuGames
,因为初始状态(null
或undefined
)是错误的:
或者最好确保它始终是使用空jQuery对象的jQuery对象:
第二种方法便于避免对jQuery对象进行错误检查。“null
是Javascript中的对象,
”,这是不正确的。它始终是一个原语,尽管typeof
操作符返回字符串“object”
。操作符的实例不受此影响。“…这种将未定义
视为匹配的空
的行为可能是特定于浏览器的。。。"一点也不。在null
和undefined
之间的比较不是特定于浏览器的。它在ECMAScript中定义得很好。谢谢,第一个方法不起作用,但第二个方法很好。@Atsso:显然我在第一部分对null的假设可能不正确,但第二个选项在jQuery中通常非常有用。我将l进一步调查,因为最初的错误仍然没有意义:)…如果游说团成员
为null
或未定义
,则的instanceof
操作符会给你false
。听起来像是个错误。在你的测试中()
函数,尝试添加s=s+LobbyMenuGames.jquery
以查看它提供了什么。您应该获得版本号。使用fn.jquery返回“无法获取未定义或空引用的属性'jquery'”LobbyMenuGames.jquery
我的第一条评论被误认为是.fn
,这就是我删除并重新发布它的原因。我很好奇。这个问题是关于警报()
输出,还是您的代码中存在实际问题。我查看了您使用的解决方案,以及是否有.ready())
问题,这并不能解决它,尽管隐藏一个错误会很有用……最终你的问题似乎是你在.ready()中运行测试
回调,但您有一些其他代码试图使用依赖于LobbyMenuGames
的代码。这可能会导致其他问题。请确保所有依赖于DOM就绪的代码不会运行得太快。
var LobbyMenuGames; // Global Variable
$(document).ready(function ()
{
if (!LobbyMenuGames)
LobbyMenuGames = $("#LobbyMenuGames");
}
var LobbyMenuGames = $(); // Global Variable is an empty jQuery collection
$(document).ready(function ()
{
LobbyMenuGames = $("#LobbyMenuGames");
}