jQuery中绑定事件时能否指定事件冒泡的顺序

Beeker
  • 386

由于受到模板系统的限制,我写在页面上的js是分散的,而它们都是绑定在jquery的ready事件中的,比如这样

<!-- header.php -->
<script>
$(document).ready(function () {
    ...
});
</script>

<!-- body.php -->
<script>
$(document).ready(function () {
    ...
});
</script>

<!-- foot.php -->
<script>
$(document).ready(function () {
    ...
});
</script>

因为事件执行顺序是跟它的绑定顺序一致的,也就是说foot.php里的ready肯定是最后触发的,但是由于我会在这里面做一些变量初始化的工作,想让foot.php里面readyhandler第一个被触发,请问在不挪移代码顺序的情况下有何办法呢?

回复
阅读 6.9k
3 个回答
<!-- header.php -->
<script>
var ready_funcs=[function () {
    ...
});
</script>

<!-- body.php -->
<script>
ready_funcs.push(function () {
    ...
});
</script>

<!-- foot.php -->
<script>
$(document).ready(function () {
    ...
    $.each(ready_funcs,function(idx, fn){
        fn();
    });
});

</script>

可以把header 和body 要做的事情放到函数中在footer中调用吧

如果初始化的工作不依赖于页面其它资源的加载,可以把footer的初始化工作放到ready函数外面,
使用一个匿名函数使其立即执行。

这样的好处就是弱化了header.php和footer.php的脚本依赖关系。

宣传栏