我对jquery的负载感到困惑

时间:2011-05-19 09:06:34

标签: jquery dom load this ready

使用jquery,我怎么能在dom加载后做一些事情,我这样写:

<script>
$("#google").load(function() {
  alert('ok');
});
</script>
<img src="http://www.google.com/images/logos/ps_logo2.png" id="google" />

但没有任何事情发生〜 如果我使用ready()而不是像这样加载:

 <script>
    $("#google").ready(function() {
      alert(this);
      alert('ok');
    });
    </script>
    <img src="http://www.google.com/images/logos/ps_logo2.png" id="google" />

,它会起作用,但指针“this”不会是$(“#google”),它似乎是“窗口”或其他东西,我感到困惑〜

5 个答案:

答案 0 :(得分:3)

如果我理解正确,您希望在之后操作#google DOM完全加载。那么你想要使用的是$(document).ready(function() {//do stuff with #google});

.load()用于发出ajax请求。你应该阅读here

了解#google是否动态生成也很有趣。

哦,在你的第二个例子中,你不能alert(this)alert()只需将字符串作为参数。

答案 1 :(得分:1)

在您的第一个代码中,您正在查找#google元素并告诉它在加载图像时通知您。但是,在执行javascript时(上面元素,在代码中),存在没有#google元素,因此事件监听器是没有分配给任何东西。

可悲的是,在DOMReady侦听器中添加事件侦听器并不总能解决问题。例如,如果图像已经在浏览器缓存中,则#google加载事件可能会在 DOMReady之前发生。最安全的方法似乎是在创建图像后立即附加的监听器。

<img src="http://www.google.com/images/logos/ps_logo2.png" id="google" />
<script type="text/javascript">

$('#google').load(function() {
   alert('ok');
});

</script>

Working example

如果您不满意在代码中间注入脚本块,但希望稍后将脚本推迟到某个地方,则可以随时收听$(window).load()而不是$('#google').load() 。这相当于<body onload="">,即它将在所有外部内容加载时运行。因此,当$(window).load()出现时,您知道您的#google图片已加载,但在加载后无法立即

答案 2 :(得分:0)

请改为尝试:

$(function() {
    var that = $("#google");
    alert(that);
});

此代码将在DOM完全加载时运行,由$(document) ready()事件触发。

答案 3 :(得分:0)

只需使用以下内容:

$(document).ready(function() {
   alert("The DOM has loaded");
});

.load函数用于触发ajax调用并将响应放在指定的div中。

答案 4 :(得分:0)

首先应该将事件处理程序绑定到load事件,然后将图像的src设置为实际启动加载。

$('#google').bind("load", function() {
    alert('ok');
});
$("#google").attr("src", "http://www.google.com/images/logos/ps_logo2.png");

请参阅:http://jsfiddle.net/VaLhf/