在事件触发后注册jQuery(window).load(...)事件?

时间:2010-03-25 21:17:10

标签: jquery

我是小组的新手,只是关于jQuery(窗口).load(function(){})的简单问题;。

我有一个外部JS文件,在窗口加载事件发生后“动态插入”页面。在这个JS文件中,我有一个声明如下:

jQuery(window).load(function() {
    alert("Something");
});

我的问题是,上面的alert()语句是否会被执行,因为当我的上面的函数被注册到窗口加载事件时,事件已经被触发了。我希望上面的警报立即触发,因为它应该等待的事件已经完成。

我很感激任何想法。

谢谢!

2 个答案:

答案 0 :(得分:3)

不,它不会触发,但是,您可以在插入后调用该事件:

$(window).load(); //or.. $(window).trigger('load');

这将触发该代码运行。

在文档准备就绪后,使用document.ready会立即触发,但$(window).load(function() {... })显式绑定到已经触发的窗口加载事件。

答案 1 :(得分:1)

这个问题也让我感到困惑。我想在页面加载后添加'load'回调可能会有风险 - 因为如果'load'事件已被触发,它将不会被称为所有

我完全同意 - 我也希望我的回调立即被调用,因为它应该等待的事件已经完成。看起来这与文档'ready'事件如果文档已经准备好后立即触发其回调的方式更加一致...

这是我的解决方法,用CoffeeScript编写:

$(window).on 'load', ->
  window._loaded = true

window.on_window_load_safe = (callback) ->
  if window._loaded
    # Since the load even already happened, if we tried to add a new callback now, it would not even
    # get called. So just call the callback immediately now.
    callback.call()
  else
    $(window).on 'load', ->
      callback.call()

您可以使用以下内容进行测试:

  setTimeout(->
    on_window_load_safe ->
      console.debug 'on_window_load_safe called me'
  , 2000)