我的javascript适用于大多数浏览器,但Ipad,Iphone或Safari for Windows中的Safari除外。
LobbyMenuGames成为桌面浏览器IE,Firefox和Chrome上的jQuery对象。我收到了这条消息。
1 http://www.nurgi.com/atsso/working.png
但如果我尝试在Safari中打开,我会收到此消息。
1 http://www.nurgi.com/atsso/safari.png
像Safari这样的问题接缝会过早地触发$(document).ready(function()但我不确定。如果我在onclick事件中再次声明它,我可以将变量变为jQuery对象。
您可以转到iPhone上的http://nurgi.com/atsso/test.aspx来复制同样的错误。
这是一个简化的代码,删除了额外的代码:
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);
}
答案 0 :(得分:2)
null
是Javascript中的object
,但您的初始值实际为undefined
。将undefined
视为匹配null
的行为可能是特定于浏览器的。
尝试更简单的!LobbyMenuGames
,因为初始状态(null
或undefined
) falsey :
var LobbyMenuGames; // Global Variable
$(document).ready(function ()
{
if (!LobbyMenuGames)
LobbyMenuGames = $("#LobbyMenuGames");
}
或者更好的是确保它始终是使用空jQuery对象的jQuery对象:
var LobbyMenuGames = $(); // Global Variable is an empty jQuery collection
$(document).ready(function ()
{
LobbyMenuGames = $("#LobbyMenuGames");
}
第二种方法可以方便地避免对jQuery对象进行虚假检查。