javascript - jquery $(document).ready()和$.load执行顺序问题
高洛峰
高洛峰 2017-04-11 09:23:01
[JavaScript讨论组]

先说说我应用的地方,就是网站的评论框,我打算用$.load动态的向后台获取评论数据,每有一条评论就用$.load加载一次(然后问题就来了)

首先这个问题我自己也已经研究过很多,$.load加载成功有执行函数的功能,如果我在这里为按钮绑定事件的话(因为我是要多次load,结果会导致一个按钮被重复绑定多次事件)。然后我也试过.on的方法(但是因为p的class名称是相同的,然后也会有被重复执行的问题)
所以现在我想明白ready和load到底谁先执行的问题,或者谁能给个更好的解决方案

test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="jquery.js"></script>
</head>
<body>
<p id="test2"></p>
<script>
    $('#test2').load('test2.html');
    $(document).ready(function(){
        $('#btn').click(function(){
            alert('绑定成功');
        });
    });
</script>

</body>
</html>

接下来是test2.html

<button id="btn">test2</button>

这样之后点击test2按钮,但是不会有任何反应,也就是说按钮并没有被绑定事件。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
PHP中文网

题主可以看下jQuery源码 如果题主js基础扎实的话,就比较容易明白ready和$.load到底谁先执行的问题

$.load
ready
DOMContentLoaded

通过源码对比可知,$.load其实是一种ajax请求方法,也是默认异步执行的。而ready方法实际上就是jquery对DOMContentLoaded这个状态的一个封装.

题主可以试着用chrome dev tools试试,

尤其是第三步可以明显看到,index.html是最先加载的,因此此时的DOMContentLoaded事件已经触发,所以jquery封装的ready事件也触发了,由于$.load是异步执行的,所以浏览器解析的时候,$.load放在之后执行,通过断点也可以看出,ready下的console最先打印出数据,之后才是$.load加载的html。

另外上面一位说的完全可以解决题主的问题。

PHP中文网

load是异步的,它在执行load的同时,也会执行ready里面的内容,如果要成功绑定的话,可以这样写:

$('#test2').load('test2.html','',function(){
    $('#btn').click(function(){
        alert('success');
    })
})
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号