2011-06-29 22 views
8

Biraz JavaScript sorunum var. Kod, Opera ve Firefox tarayıcısında çalışıyor ancak Internet Explorer 8'de çalışmıyor. Herkes nedenini biliyor mu?JavaScript - geçersiz argüman IE8

function createbtn(object, inner) { 
    var hover = document.createElement("div"); 
    hover.setAttribute("class", "myarea"); 
    if (inner) { 
     hover.style.width = object.width - 16 + "px"; 
     hover.style.height = object.height - 16 + "px"; 
     hover.style.top = getposy(object) + "px"; 
     hover.style.left = getposx(object) + "px"; 
    } else { 
     hover.style.width = object.width + "px"; 
     hover.style.height = object.height + "px"; 
     hover.style.top = getposy(object) - 8 + "px"; 
     hover.style.left = getposx(object) - 8 + "px"; 
    } 
} 

Ben sadece Javascript öğreniyorum. Herhangi bir geribildirim hoşgeldiniz. Simon

+0

'getposx' ve' getposy' nedir? – Neal

+0

Tam kodu bir http://jsfiddle.net demosuna koyabilir misiniz? – Neal

+0

Geliştirici araçlarını (F12) kullanırsanız, IE 8'in hangi oluşturma modunu kullandığınızı kontrol edebilirsiniz. Ne olduğunu gönderebilir misiniz? Quirks Modunda olduğundan şüpheleniyorum. –

cevap

2

hover.setAttribute("class", "myarea"); ile ilgili olması gerekir. IE 8 IE 7 veya daha düşük Modda çalışıyorsa, bu çalışmaz. O zaman hover.className = 'myarea' (tüm tarayıcılar tarafından desteklenen) kullanmanız gerekir.

sAttrName parametresi, istenen içerik niteliğin adını olup doküman nesne modeli (DOM) özelliğinin kullanılmasını gerektirir. Örneğin, IE8 modunda, bu yöntem sAttrName'in CLASS özniteliğini belirlerken, aldığında veya kaldırırken "className" olmasını gerektirmez. Internet Explorer ve Internet Explorer 8'in önceki sürümleri uyumluluk modunda hala ilgili DOM özellik adını belirtmek için sAttrName gerektirir.

http://msdn.microsoft.com/en-us/library/ms536739%28v=vs.85%29.aspx

IE çalıştıran modunu kontrol

.

+0

Ack, bana onu döv. –

9

object.width o zaman bu genişlikler negatif olmayan olmak zorunda çünkü yasadışı önünde bir eksi işareti, bir dize üretecek az 16

hover.style.width = object.width - 16 + "px"; 

olduğunu.

Sen yüksekliği için benzer

hover.style.width = Math.max(object.width - 16, 0) + "px"; 

ve diyerek bu sorunu giderebilirsiniz.

Birçok tarayıcı geçersiz içeriği yok sayar, ancak bazı modlarda IE daha sıkıdır, bu nedenle muhtemelen diğerlerinde sessiz bir hataya yakalanırsınız.

+0

IE8 tarayıcı modunu kullanıyorum ** standart **. Negatif genişlik/yükseklik problemini çözdüm ama pozisyon ayarı çalışmıyor. Kod burada: http://jsfiddle.net/AT825/ Bunun nesi var? Şimdiye kadar tüm büyük geribildirim için teşekkürler. – Simon

+0

"getposy" ve "getposx" öğelerinin NaN'e dönmediğinden emin misiniz? –

+0

Emin değilim. Hover.style.top = getposy (object) + "px' "için; IE8 hata ayıklayıcı sadece bir _Invalid Argument_ – Simon

İlgili konular