如果我在函数内使用
$(document).ready()
处理程序,它是否仍然保证其中的代码只在文档准备就绪时运行,即使文档准备就绪事件已经在过去很久发生?$(document).ready()
处理程序,它是否仍然保证其中的代码只在文档准备就绪时运行,即使文档准备就绪事件已经在过去很久发生?可以。
从jQuery的ready
函数中获取,源代码。
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if ( document.readyState === "complete" ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
return setTimeout( jQuery.ready, 1 );
}
是的,这是安全的。jQuery有多种设置处理程序的方法,唯一“不安全”的是$(document).bind("ready", handler)
。从jQuery文档中:
以下三种语法等价:
$(document).ready(handler)
$().ready(handler)
(不推荐使用)$(handler)
还有一种方式是
$(document).bind("ready", handler)
。它的行为类似于ready方法,但有一个例外:如果ready事件已经触发并且你尝试去绑定.bind("ready")
,那么绑定的处理程序将不会被执行。用这种方法绑定的ready处理程序是在上述其他三种方法绑定的处理程序之后执行的。
可以。你可以把它放在一个函数里面,每当你调用该函数时,它就会触发。