2012-07-11 10 views
3

好的,所以這很奇怪。 以下代碼適用於所有瀏覽器,IE9中的開發人員工具將其鏈接到IE8時除外。將圖像添加到dom並執行.load

var img = $('<img/>').load(function (e) { 
    $('.md').append(e.target); 
}).attr({ 'id': 'imgprofile', 'src': "http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/HelloWorld.svg/512px-HelloWorld.svg.png", 'style': 'border:2px solid #a8a7a7;' }); 

這裏有一個例子: http://jsfiddle.net/RZeY5/5/

,你可以看到,當完成了.load事件(僅在IE8模式) ,而不是添加圖像DOM,有事和整個屏幕變白(在jsfiddle示例中,iframe變白)。

花了幾個小時試圖瞭解我的代碼有什麼問題(這是一個非常長的JS文件....) 我設法把它放到$('.md').append(e.target);線,但我不知道該怎麼辦現在... 這是我的錯嗎?這是JQuery的錯誤?是IE8的錯? 我能做些什麼來解決這個問題?

請注意,您必須在IE8模式下才能發生「錯誤」。

編輯** 我只是如此,它也發生在IE7模式...

回答

1

在這些IE外,該e.target === documente.target是不恰當的,無論如何,你應該使用e.currentTargetthis

http://jsfiddle.net/RZeY5/7/

那些年長的IE使用srcElement,這恰好是在這種情況下null和jQuery它在這種情況下分配給document

// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) 
    if (!event.target) { 
     event.target = originalEvent.srcElement || document; 
    } 
+0

不應該JQuery處理這個?畢竟,CrossBrowser是他們的東西......還有,你如何修復工作? originalEvent是未知的。 – Dementic 2012-07-11 17:29:13

+0

@Dementic它通過將其設置爲'document'來處理它,否則它將是'null'。雖然'.currentTarget'會比'document'更好,但我認爲他們有他們的理由? :P – Esailija 2012-07-11 17:29:47

+0

順便說一句,即使由於將'e.target'更改爲'this'「修復」它,它會打破我腳本的其餘部分,就好像'.load'不存在一樣。 – Dementic 2012-07-11 17:35:26