为什么OS X上的FF在点击事件处理程序中丢失了jQuery-UI?

时间:2012-03-28 04:07:14

标签: jquery macos jquery-ui firefox osx-lion

在使用jQUery 1.7.1和jQUery-UI 1.8.18的网页中,如果我在文档准备就绪时在警告框中输出$ .ui,我会得到[object Object]。但是在使用Firefox时,如果我在click事件处理程序中输出$ .ui,我会得到'undefined'作为结果。使用其他浏览器(IE,Chrome和Safari的最新版本),单击链接时结果仍然是[object Object]。

这是我的HTML页面:

<!doctype html>
<html>
<head>
    <title></title>

    <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>
    <script src="Scripts/jquery-ui-1.8.18.js" type="text/javascript"></script>

    <script type="text/javascript">
        $(document).ready(function () {

            alert($.ui);    // ALERT A

            $(document).on("click", ".dialogLink", function () {
                alert($.ui);    // ALERT B
                return false;
            });
        });
    </script>

</head>
<body>
    <a href="#" class="dialogLink">Click me!</a>
</body>
</html>

在这篇文章中,我将其描述的另一个问题简化为最简单的形式:$(this).dialog is not a function。为了清晰起见,我创建了一个新帖子,因为真正的问题与原来的问题不同,现在问题就是针对问题所在的地方。

更新

如果我用简单的alert($);替换我的警报,我会得到警告A:

的结果
function (selector, context) {
    return new jQuery.fn.init(selector, context, rootjQuery);
}

这个警报B:

function (a, b) {
    return new d.fn.init(a, b, g);
}

这对我来说没有意义,虽然我可能不太了解$是什么......

更新2:

我只能在OS X上使用Firefox重现这个问题。在Windows 7上运行的Firefox上,一切都很好。

1 个答案:

答案 0 :(得分:4)

我认为你在OSX上的Firefox安装中必须有一个附加组件,它正在破坏页面;具体来说,我认为它是在页面加载后将jQuery的压缩版本加载到页面中,这是一个奇怪的事情,但解释了你所看到的行为。您对$函数的警报清楚地显示它从未压缩版本(return new jQuery.fn.init(selector, context, rootjQuery);)更改为压缩版本(return new d.fn.init(a, b, g);),并且重新加载jQuery将替换$一个全新的版本,这意味着jQuery UI的添加将会从中消失。例如,在页面加载后加载压缩jQuery的东西符合症状。

如果没有加载项(或恶意软件,我认为)这样做,我们没有理由使用您发布的页面重新定义$$.ui,我现在已经尝试过Linux上的Chrome 17,Firefox 11和Opera 11(Ubuntu 11.10)以及Windows 7上的IE9,Firefox 5,Safari 5和Opera 11.它们都按预期工作。

我会禁用所有加载项,然后重试。如果它仍然发生,我会完全从机器上擦除Firefox并从头开始重新安装。