毕竟$(document).ready()已经运行,是否有这样的事件?

我有一个first.js文件包含在页面index.php有这样的事情:

$(function(){ $("#my_slider").slider("value", 10); }); 

而他们在index.php我有一些dynamic创build的滑块:

 <?php function slidders($config, $addon) { $return = ' <script type="text/javascript"> $(function() { $("#slider_'.$addon['p_cod'].'").slider({ min: '.$config['min'].', max: '.$config['max'].', step: '.$config['step'].', slide: function(event, ui) { $("#cod_'.$addon['p_cod'].'").val(ui.value); $(".cod_'.$addon['p_cod'].'").html(ui.value+"'.@$unit.'"); }, change: function(event, ui) { $("#cod_'.$addon['p_cod'].'").change(); } }); $("#cod_'.$addon['p_cod'].'").val($("#slider_'.$addon['p_cod'].'").slider("value")); $(".cod_'.$addon['p_cod'].'").html($("#slider_'.$addon['p_cod'].'").slider("value")+"'.@$unit.'"); }); </script>'; return $return; } ?> 

问题是,因为我的index.php滑块正在我的first.js后实例化,我不能在那里设置一个值,有没有像“毕竟$(document).ready()运行”,我可以在first.js中使用来操纵index.php中创build的滑块?

不知道如何知道最后的$(document).ready()函数何时被触发,但$(window).load()函数在$(document).ready()

最安全的做法是 $(document).ready()调用$(window).load() $(document).ready() 。 这将在所有情况下保持执行顺序,通过确保所有$(document).ready()脚本完成之前,运行最后的代码不被传递给$(window).load() 。 如果没有这个,在所有的$(document).ready()脚本启动之前,但在所有的$(document).ready()脚本完成之前,可能会调用$(window).load()

 $(document).ready(function() { $(window).load(function() { // this code will run after all other $(document).ready() scripts // have completely finished, AND all page elements are fully loaded. }); }); 

基于伊恩的答案,我想出了这个(testing – 工作):

 jQuery(document).ready(function() { jQuery(document).ready(function() { /* CODE HERE IS EXECUTED AS THE LAST .ready-CALLBACK */ }); }); 

当然这是因为准备好的callback是按照它们分配的顺序调用的。 此时,当您的外部准备好的callback被调用时,所有其他的脚本应该已经准备好了callback。 所以现在分配你已经准备好的callback(内部callback)将会导致你成为最后一个callback。

试试这个整洁的技巧/毛病:

 $(function(){ $(function(){ $("#my_slider").slider("value", 10); }); }); 

看起来愚蠢的权利? 它的工作原理是因为jQuery按照添加的顺序执行事件处理程序。 在你的事件处理程序中添加一个事件处理程序的时间是尽可能晚的(只要确保你不会在任何滑块上意外执行这个操作,这很容易)。

概念validation。 http://jsfiddle.net/9HhnX/

jQuery的$(document).ready()函数的目标之一是标准的javascript window.onload事件不会运行,直到页面上的所有内容被加载(包括图像等),即使函数可以开始运行在那之前。 所以$(document).ready()一旦构buildDOM层次就运行。

鉴于此,一个选项是在页面加载中运行“所有其他事项”脚本。 但是这并不能保证所有的$(document).ready()脚本都已经完成。

一个更好但更复杂的select是创build一个检查滑块存在的函数,如果它们不存在,则自己调用“setTimeout”,因此它可以等待几毫秒并再次尝试。

(要回答您的具体问题,不,没有“毕竟$(document).ready()已经运行”callback。

你最好是添加一个独特的类到你的滑块,而不是#my_slider,因为这只会激发id = my_slider的元素。

如果你想拥有相同的function,你应该检查.live从jquery它将把相同的function绑定后添加的元素。

如果这不适合你,那么当你添加新的滑块时,你将不得不在DOM中通过它们并调用必要的函数。