我在index.php页面中包含了一个first.js文件,其中包含以下内容:
$(function(){
$("#my_slider").slider("value", 10);
});
他们在index.php中我有一些动态创建的滑动器:
<?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中创建的滑块?
答案 0 :(得分:73)
不知道如何判断上一个$(document).ready()
函数何时被触发,$(window).load()
函数在$(document).ready()
之后触发
答案 1 :(得分:63)
最安全的做法是在 $(window).load()
内调用$(document).ready()
。这将在所有情况下保留执行顺序,确保在所有$(window).load()
脚本完成之前,您的运行最后一个代码不会传递给$(document).ready()
。如果没有这个,在某些浏览器中可能存在竞争条件,在所有$(window).load()
脚本启动之后但在所有$(document).ready()
脚本完成之前可以调用$(document).ready()
$(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.
});
});
答案 2 :(得分:15)
根据伊恩的回答,我想出了这个(经过测试 - 工作):
jQuery(document).ready(function() {
jQuery(document).ready(function() {
/* CODE HERE IS EXECUTED AS THE LAST .ready-CALLBACK */
});
});
当然这是因为现成的回调按照分配的顺序被调用。目前,当调用外部就绪回调时,所有其他脚本应该已经分配了它们的就绪回调。因此,指定现成的回调(内部回调)现在将导致您的回复成为最后一个。
答案 3 :(得分:12)
尝试这个巧妙的技巧/粗暴黑客:
$(function(){
$(function(){
$("#my_slider").slider("value", 10);
});
});
看起来很蠢吗?它的工作原理是因为jQuery按照添加的顺序执行事件处理程序。在事件处理程序中添加一个事件处理程序的时间要尽可能晚(只是确保你没有意外地在任何一个滑块上执行此操作;这很容易)。
答案 4 :(得分:3)
jQuery的$(document).ready()函数的目标之一是标准的javascript window.onload事件在页面上的所有内容都被加载(包括图像等)之后才会运行,即使函数可以在此之前有用地开始运行。因此,只要构造DOM层次结构,$(document).ready()就会运行。
鉴于此,一个选项是在页面加载时运行“after everything”脚本。但这并不能保证所有$(document).ready()脚本都已完成。
更好但更复杂的选项是创建一个检查滑块是否存在的函数,如果它们不存在,则调用“setTimeout”本身,因此它可以等待几毫秒然后重试。 / p>
(要回答你的具体问题,不,没有“毕竟$(文件).ready()已经运行”回调。)
答案 5 :(得分:0)
最好为滑块添加一个唯一的类而不是#my_slider,因为只会触发id = my_slider的元素。
如果你想拥有相同的功能,你应该从jquery中查看.live,它会将相同的功能放到绑定后添加的元素上。
如果这对您不起作用,那么当您添加新的滑块时,您必须在DOM中浏览它们并调用必要的功能。