2011-04-14 88 views
1

是否有可能以某种方式拦截DOM就绪事件,以便通常在$(document).ready(function() { ... }之内触发的任何内容不会被执行?然后再手动触发事件,使代码被执行了jQuery:拦截原始DOM就绪事件?

在我的情况,我有大量的现有代码已经依靠$(document).ready(function() { ... },我的希望是,我也不会做一个查找/替换有这一切依赖于定制的手动触发事件。

回答

0

jQuery.trigger()是为这样的需要作出

附有 .bind()或它的快捷方式的方法 之一的任何事件处理程序,当对应 事件发生时被触发。但是,可以使用.trigger() 方法手动触发 。到.trigger()的调用在他们 是,如果事件是由用户触发 自然地以相同的顺序执行 处理程序:

+0

但是,如何防止原始事件触发?据我可以告诉e.preventDefault()在这种特殊情况下是不可能的。 – Wilco 2011-04-14 05:10:54

+0

当你不想在dom上触发任何事件准备好然后为什么你在'准备好'里面写入 – diEcho 2011-04-14 05:13:11

+0

我基本上试图避免重写当前依赖于DOM就绪事件的大量现有脚本。我希望能有一些方法来拦截它,并在以后手动触发它。 – Wilco 2011-04-14 05:22:16

0

如果你不想要的东西是“正常”触发时,不应该在$(document).ready(on_ready_func)。一旦DOM被加载并且在加载页面内容之前,它内部的所有东西都会加载。

取而代之的是,从on_ready_func中选择您希望手动触发到另一个函数中的内容,例如manual_func,并在您选择的事件中调用该函数。

请注意,ready函数无法使用触发器触发,因此您不能再次触发func,除非您将其作为单独的函数使用。

拆分是你最好的选择。

var manual_func = function(){ 
    // Manual loads 
} 

var on_ready_func = function(){ 
    // only things to be loaded on dom ready 
    // e.g. 

    $('button#load_manual_trigger').bind('click', manual_func); 
} 

$(document).ready(on_ready_func); 

快乐编码。