2010-03-25 49 views
4

我是新来的小组,只是有一个关于jQuery(window).load(function(){});的简单问题。事件发生后注册jQuery(window).load(...)事件?

我有一个外部的JS文件,在窗口加载事件发生后,在页面上动态插入。这里面JS文件我有如下语句:

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

我是,将警报()语句以上得到,因为我上面的函数被注册到窗口加载事件时执行的问题,事件已经开除了。我希望上面的警报立即启动,因为它应该等待的事件已经完成。

我很欣赏任何想法。

谢谢!

+0

可能应该使用'jQuery(document).load(...)'代替。 – Pointy 2010-03-25 21:22:25

+0

另外:目前发生了什么? – Pointy 2010-03-25 21:23:14

+0

目前它不会触发。我认为立即启动这个功能会更有意义。由于编码器希望在发生window onload事件之后执行其功能,并且jQuery应该足够聪明以了解事件发生后,我们应该立即调用该函数。 – amitsaurav 2010-03-25 21:31:32

回答

3

没有,那就不火,但是,你可以插入这样以后调用事件:

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

这将触发代码运行。

使用document.ready将在文档已准备好后立即触发,但$(window).load(function() {... })已明确绑定到窗口的加载事件,该事件已触发。

+0

谢谢!我预计这种行为会更聪明一些,但我明白你的意思。我将尝试在实际触发之前将我的函数注册到加载事件。 (更多在上面的评论)。 – amitsaurav 2010-03-25 21:33:13

1

这个问题也咬我。我认为在页面加载之后加载'load'回调会很危险,因为如果'load'事件已经被触发,它将不会被调用

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

这里是我的解决方法,写成的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)