【问题标题】:jQuery .trigger() or $(window) not working in Google ChromejQuery .trigger() 或 $(window) 在 Google Chrome 中不起作用
【发布时间】:2011-02-28 03:43:11
【问题描述】:

我有这个 jQuery ajax 导航选项卡插件,我使用 CSS-Tricks.com 和 jQuery hashchange event 插件的帮助创建了这个插件(检测不支持它的浏览器中的哈希更改)。

这里的代码有点长,但它是这样的:

第 1 部分)单击选项卡时,它会获取该选项卡的 href 属性并将其添加到浏览器导航栏中,例如 '#tab_name':window.location.hash = $(this).attr("href");

Part 2)当导航栏发生变化(hash变化)时,得到href变化是这样的:window.location.hash.substring(1);(子字符串是只得到'tab_name'没有'#'),然后调用ajax函数获取要显示的信息。

我想在页面被访问时自动触发插件加载第一个标签,所以在代码的开头我放了:

if (window.location.hash === '') { // If no '#' is in the browser navigation bar
   window.location.hash = '#tab_1'; // Add #tab_1 to the navigation bar
   $(window).trigger('hashchange'); // Trigger a hashchange so 'Part 2' of the plugin calls the ajax function using the '#tab_1' added
}

问题是它在 FF 中有效,但在 Chrome 中无效,我的意思是,一切正常,但似乎 $(window).trigger('hashchange'); 不起作用,因为它没有获得第一个选项卡..

有什么建议吗??

注意:它在前一段时间有效,但突然无效(可能是 Chrome 更新)。

【问题讨论】:

    标签: javascript jquery hash


    【解决方案1】:

    我怀疑您试图以浏览器不满意的方式触发事件。你的“hashchange”处理程序在哪里定义?我建议您尝试将其绑定到

    $('body').bind('hashchange', function() { ... })
    

    而不是“窗口”。即使这样也可能会给您在 WebKit 浏览器中带来问题;如果是这样,您可以创建一个<div> 来包装您的正文内容,并绑定到它。

    【讨论】:

    • 嗯,hashchange 是这样定义的: $(window).bind('hashchange', function() { ...
    • 我发现了问题,我在调用 $(window).trigger('hashchange');在 $(window).bind('hashchange', function() { 中定义 hashcnage 之前...感谢 por 指出我的方向!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多