我是小组的新手,只是关于jQuery(窗口).load(function(){})的简单问题;。
我有一个外部JS文件,在窗口加载事件发生后“动态插入”页面。在这个JS文件中,我有一个声明如下:
jQuery(window).load(function() {
alert("Something");
});
我的问题是,上面的alert()语句是否会被执行,因为当我的上面的函数被注册到窗口加载事件时,事件已经被触发了。我希望上面的警报立即触发,因为它应该等待的事件已经完成。
我很感激任何想法。
谢谢!
答案 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)