Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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 $(“Test”在Safari中成为对象而不是jQuery_Javascript_Jquery_Safari - Fatal编程技术网

Javascript $(“Test”在Safari中成为对象而不是jQuery

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

除了Ipad、Iphone或Safari for Windows中的Safari之外,我的javascript可以在大多数浏览器上运行

LobbyMenuGames成为桌面浏览器IE、Firefox和Chrome上的jQuery对象。我收到这个信息

但如果我尝试在Safari中打开,我会收到以下消息

问题在于Safari过早地触发了$(document).ready(function()),但我不确定。如果在onclick事件中再次声明该变量,则可以将其设置为jQuery对象

您可以通过在iphone上转到来复制相同的错误

这是一个已删除额外代码的简化代码:

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");
}