Jquery的IMG通过追加加入()触发的onload两次(Jquery img added thr

2019-07-29 15:59发布

产生头痛,我的代码是相当简单:

$(function(){ 
$("#test").append('<img onload="alert(\'hi\')" src="Image.jpg"/>');
})

我在我的脑袋上面的代码,并与ID在身体“测试”一个div。 现在我的问题是,页面产生两个警报加载图像时,但我希望它只是一个生产的“onload事件”应该只有once-当我手动添加图像而没有任何的JavaScript它发生的方式被触发..
见我在做的小提琴: http://jsfiddle.net/9985N/

任何帮助/解释是极大的赞赏...

Answer 1:

更新时间(因为有些人不相信我,大声笑)

因为.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只是一个想法。



Answer 2:

或这个:

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');  
});


文章来源: Jquery img added through append() triggers onload twice