【问题标题】:JQuery domready and window ready randomly working?JQuery domready和window ready随机工作?
【发布时间】:2012-01-28 04:37:27
【问题描述】:

我最近注意到有时 domready 和 window.load 不起作用。就像进入页面时随机工作,或者刷新一样。

说我有:

$(function(){
  $('.hide').hide();
  // disable html5 native validation to let jquery handle 
  $('form').attr('novalidate','novalidate');
});

$(window).load(function(){
  $('.input').click(function(){
      $(this).animate({opacity:0.8});
  }).blur(function(){
      $(this).animate({opacity:1});
  });
});

有时当我加载页面时,元素没有被隐藏,有时是,输入字段会动画,有时不会,两者不一定一起失败。如果我刷新页面几次,它就会工作。

我一直以为 domready 会在 dom 准备好后立即执行,而 window.load 会一直等到页面上的所有内容都渲染好了吗?或者这是来自 HTML5 的更多错误?

问题是:我是错过了什么还是只是误解了什么?

编辑:特别是 Chromium。我在 Ubuntu 上,所以如果它是一个 chromium 错误,我不会感到惊讶。

【问题讨论】:

  • 我知道这不能回答你的问题,但我不知道你为什么在一个地方使用 $(function(){... (domready) 而在另一个地方使用 $(window).load... (window load)。难道你不能用 domready 实现同样的事情,因为你不等待图像加载?
  • blue 是做什么的?它是一个自定义的 jQuery 函数吗?
  • @marcosfromero:我确实在某些页面上加载了图像,但这是一个简单的示例,用于演示我的设置以及是否是 HTML5 的问题,或者只是铬本身有这个问题。另外,你说的蓝色是什么?我不记得我的代码中的任何地方都是蓝色的。
  • 为什么会是 HTML5 的错误?唯一可靠地支持加载事件的元素是 bodyiframe。 jQuery 根据它认为可用的内容孵化自己的 DOM 就绪事件。我不会把两者混在一起。特别是,不要依赖 HTML5 - 它不是标准并且支持是混合的。在重要的事情上坚持使用 HTML 4.01 和 DOM 0/1/2/3。谨慎使用 HTML5 功能,进行功能测试和适当的回退。不是每个人都在使用最新的 Chrome 浏览器或其他什么。
  • @RobG:我想你是对的。我去开始采摘扩展的,发现谷歌语音插件正在搞乱domready和window.load。如果插件已登录,它会尝试在页面上查找干扰 jquery domready 的电话号码。

标签: javascript jquery domready


【解决方案1】:

请注意,如果您的 html 结构非常复杂,可能会延迟 dom 准备就绪的时间。浏览器可能会尝试尽可能快地呈现页面,并且对于一个非常复杂的页面,可能会开始呈现并且会触发 domready 事件,但是浏览器会在您设置的特定代码之前快速呈现内容up 被触发。

jQuery domready 中的一个块尽可能快地发生,但如果你说:

setTimeout(function(){ $().ready(function(){alert('finally');});}, 9000);

“尽可能快”仍然会受到代码出现位置的限制,在这种情况下是在 9 秒超时之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2013-07-02
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多