我有一个使用母版页的MVC 2 Web应用程序。在母版页中,有几个就绪块,就像下面分散在整个文件中的那样
$(document).ready(function () {
...
});
同样,我的许多观点也有分散的多个现成块。
我被要求将另一个准备好的块引入到最后运行的Master中。
我的问题是“有没有办法保证这个新的就绪块能够最后运行?”。我的想法是,如果我把它放在Master页面的最底部就能做到,但我似乎无法让自己相信这是肯定的。
答案 0 :(得分:5)
这是jQuery的.add
方法,用于将$(document).ready()
的回调推送到所有回调列表中:
add = function( args ) {
var i, length, elem, type, actual;
for ( i = 0, length = args.length; i < length; i++ ) {
elem = args[ i ];
type = jQuery.type( elem );
if ( type === "array" ) {
// Inspect recursively
add( elem );
} else if ( type === "function" ) {
// Add if not in unique mode and callback is not in
if ( !flags.unique || !self.has( elem ) ) {
list.push( elem );
}
}
}
}
所以:它基本上做的是推动list
数组中的所有函数,并在事件被触发后 - 以相同的顺序调用它们,如果你的函数被推送到最后 - 它将被调用到最后
要将其推送到最后,您可以在包含所有其他.js
文件之后将其声明
(只需确保下面没有任何其他$(document).ready()
)
答案 1 :(得分:1)
这是我使用的技巧。在母版页中,声明
var postReadyEvents = [];
然后,在子页面中,当您有一些需要最后运行的代码时,请执行
postReadyEvents.push(function() {
///your stuff - I usually use this to resize a grid or something.
});
现在,在Master Page $(document).ready()中,执行
for(var i = 0; i < postReadyEvents.length; i++)
{
postReadyEvents[i]();
}
如果在子页面和母版页上都有$(document).ready(),则子页面将首先运行,而母版页最后运行。这种方法使您能够控制某段代码运行的时间。
答案 2 :(得分:0)
我想你可以在这里做一些小动作。 因为我不知道应该适合您的解决方案的确切情况,我建议您通过
添加延迟 window.setTimeout(
在这里打电话给你的cuntion ,*延迟时间,以毫秒为单位*);
我知道这不是那么优雅,但这就是我的想法,请告诉我这是否对你有所帮助,谢谢。