【问题标题】:Why is FF on OS X losing jQuery-UI in click event handler?为什么 OS X 上的 FF 在单击事件处理程序中丢失 jQuery-UI?
【发布时间】:2012-03-28 04:07:14
【问题描述】:

在使用 jQUery 1.7.1 和 jQUery-UI 1.8.18 的网页中,如果我在文档准备好时在警告框中输出 $.ui,我会得到 [object Object]。但是,当使用 Firefox 时,如果我在单击事件处理程序中输出 $.ui,我会得到“未定义”。使用其他浏览器(最新版本的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 上,一切都很好。

【问题讨论】:

  • 为我工作:jsbin.com/iyikuk(来源:jsbin.com/iyikuk/edit#html)。该页面必须有更多内容。我把上面的,粘贴到 JSBin 中,我改变的只是脚本的来源。
  • @T.J.Crowder 我在您发布的链接上遇到了同样的问题。你使用的是什么浏览器?正如我所提到的,我只有 FF 才有这个问题。我在装有 OS X 10.7.3 的 Mac 上使用 Firefox 11.0。
  • 也适合我。与 TJ 做了同样的事情,除了为喜欢小提琴的人提供了一个小提琴:jsfiddle.net/VxDaA 此外,根据这个样本,没有理由认为它不起作用。丢失事件处理程序的最常见方法是修改 DOM,以使原始节点被销毁、克隆而没有事件等。或者添加一个新的.dialogLink(从那以后它不会绑定事件)在 document.ready 中触发)
  • 我刚刚尝试在 Windows 7 机器上使用 Firefox v10.0.2 和 Firefox v11.0,它运行良好。所以这似乎只是 OS X 上的 Firefox 的问题。
  • @GregPettit 在您的帖子和来自 T.J. 的帖子之后Crowder,我决定再做一些测试,发现问题只发生在 OSX 上。我的猜测是你在 Windows 机器上试过这个。 linux机器我没试过……

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


【解决方案1】:

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

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

我会禁用所有插件并重试。如果仍然发生,我会彻底清除机器上的 Firefox,然后从头开始重新安装。

【讨论】:

  • 在安全模式下启动 Firefox 解决了这个问题。然后,我尝试通过关闭并重新打开其中一些插件来确定是哪个插件导致了问题,但我无法再重现该问题。
  • @Jean-FrançoisBeauchamp:我会完全卸载 Firefox 并从头开始重新安装。有时偏执狂是一种生存特征。
猜你喜欢
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多