产生头痛,我的代码是相当简单:
$(function(){
$("#test").append('<img onload="alert(\'hi\')" src="Image.jpg"/>');
})
我在我的脑袋上面的代码,并与ID在身体“测试”一个div。 现在我的问题是,页面产生两个警报加载图像时,但我希望它只是一个生产的“onload事件”应该只有once-当我手动添加图像而没有任何的JavaScript它发生的方式被触发..
见我在做的小提琴: http://jsfiddle.net/9985N/
任何帮助/解释是极大的赞赏...
更新时间(因为有些人不相信我,大声笑)
因为.append
首先创建节点,然后将其移动到其适当的位置。 先尝试附加元素,然后添加它的属性如下:
$(function() {
$("#test").append(
$("<img />").attr({
src: "http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Bachalpseeflowers.jpg/300px-Bachalpseeflowers.jpg",
onload: "alert(\'hi\')"
})
);
});
我的回答没有“避免”的问题,它非常直接回答它。 如果您打开未压缩格式的文件的jquery.js,你可以清楚地看到, .append
创建node
上也就是当文档onload
首先调用事件,然后shifts
成这是当它被再次调用位置。 也许移错词,请原谅我的词汇是不是我的强项。 但是,如果你按照你看到它的产生和它的运动代码,但同样是不使用再追加移动它,因为节点已创建它简单地从一个元素移动到另一个没有respark的onload说。 正如我所说的,不知道最好的术语,但它很容易就跟着一起的jquery.js 。
不相信我? 刚刚测试了以下小提琴在MSIE9,FF12,和GoogleChrome20 0的问题。
的jsfiddle
仅供参考,这是不是一个真正的可怕做法,但我看到有人写HTML的整行jQuery中所有的时间和那种失败的目的。 这是许多书籍的图书馆,以故意阅读。 有时HTML的完整产品线似乎更容易,但它可能不会更快,因为它没有遵守所有已经为你做了伟大的布置工作。 我们的想法是“少写,多做”,这包括HTML。 毕竟,如果你是打算写HTML的整条生产线,为什么使用jQuery在所有的时候,你可能只是PHP它!? :P只是一个想法。
或这个:
var img = $('<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Bachalpseeflowers.jpg/300px-Bachalpseeflowers.jpg"/>').on('load', function(){
$('#test').append(img);
alert('loaded');
});