$(" #Test")在Safari中变为Object而不是jQuery

时间:2014-11-13 19:27:50

标签: javascript jquery safari

我的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);
}

1 个答案:

答案 0 :(得分:2)

null是Javascript中的object,但您的初始值实际为undefined。将undefined视为匹配null的行为可能是特定于浏览器的。

尝试更简单的!LobbyMenuGames,因为初始状态(nullundefined 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对象进行虚假检查。