在DOM中使用onload和在jQuery中使用.load()之间的区别是什么?

时间:2013-07-22 18:06:00

标签: javascript jquery

例如:

<iframe onload="functionName('id-name', 'http://domain.com');"/>

$('#id-name').load(functionName('id-name', "http://domain.com');

(实际上......我的jQuery是对的吗?)

更新:谢谢,全部,回复。我正在使用:

$('#id-name').load(function() {
    functionName('id-name', 'http://domain.com');
});

ETA:“body”应该是iframe(oops),所以我没有使用window.load。

3 个答案:

答案 0 :(得分:3)

首先,你的jQuery的语法是错误的。类似的jQuery将是:

$('#id-name').load(function() {
    functionName('id-name', "http://domain.com');
});

要绑定事件处理程序,您必须提供一个函数,实际上是在绑定时调用该函数。

但是,由于一些原因,这并不等同。

首先,你将处理程序绑定到#id-name元素,而不是正文(unles你也做<body id="id-name">。所以它在主体加载时不会运行,但只有当通常,每个元素的加载处理程序仅对具有异步加载的单独源的元素(例如图像和iframe)有用;它们允许您在填充这些元素时检测并采取操作。这是如果您动态更改源,则特别有用。

其次,假设你的jQuery代码在$(document).ready(...)处理程序中,就像大多数jQuery代码一样,它在DOM完全加载之后才会运行。到那时,身体的onload事件已被触发。此时添加的任何处理程序都不会为已加载的元素运行。我创建了一个fiddle来证明这一点:

<body onload="alert('inline body onload');">
    <div id="foo"></div>
</body>

$(document).ready(function () {
    $("#foo").load(function () {
        alert("foo onload");
    });

    $("body").load(function () {
        alert("jquery body onload");
    });
});

仅触发inline body onload警报。

但是,如果您只想要一个jQuery等效于在<body onload="">属性中放置函数调用,则$(document).ready()处理程序被认为是类似的。请参阅{{3>},相关侧栏中的第一个问题。

然而,正如Gloserio的回答所说,$(window).load(...)确实有效,尽管有时间(特别认可,类似于$(document).ready())。经过修改的jQuery equivalent of body onLoad证明了这一点。

答案 1 :(得分:0)

$(window).load(function () {
              functionName('id-name', "http://domain.com');
            });

似乎相当于身体的load事件。


相关

答案 2 :(得分:-2)

onload是在页面开始加载时触发的DOM事件。

.load()是使用jQuery进行AJAX调用的快捷方式。

他们真的没有任何共同之处......除了在他们的名字中“加载”。