2011-06-29 45 views
8

Tôi gặp sự cố JavaScript nhỏ. Mã này hoạt động trong trình duyệt Opera và Firefox nhưng không có trong Internet Explorer 8. Có ai biết tại sao không?JavaScript - đối số không hợp lệ 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"; 
    } 
} 

Tôi chỉ đang học Javascript. Bất kỳ thông tin phản hồi chào đón. Simon

+0

'getposx' và' getposy' là gì? – Neal

+0

bạn có thể đặt mã đầy đủ ur trong bản trình diễn http://jsfiddle.net không? – Neal

+0

Nếu bạn sử dụng công cụ dành cho nhà phát triển (F12), bạn có thể kiểm tra chế độ hiển thị của IE 8. Bạn có thể đăng nó là gì không? Tôi nghi ngờ nó đang ở chế độ Quirks. –

Trả lời

2

Tôi đoán nó phải làm với hover.setAttribute("class", "myarea");. Nếu IE 8 đang chạy trong IE 7 hoặc thấp hơn Chế độ này sẽ không hoạt động. Sau đó, bạn phải sử dụng hover.className = 'myarea' (được hỗ trợ bởi tất cả các trình duyệt).

Tham số sAttrName yêu cầu tên thuộc tính nội dung mong muốn chứ không phải thuộc tính Mô hình đối tượng tài liệu (DOM). Ví dụ, trong chế độ IE8, phương thức này không còn yêu cầu sAttrName là "className" khi thiết lập, nhận hoặc loại bỏ thuộc tính CLASS. Các phiên bản trước của Internet Explorer và Internet Explorer 8 trong chế độ tương thích vẫn yêu cầu sAttrName để chỉ định tên thuộc tính DOM tương ứng.

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

Kiểm tra chế độ IE đang chạy.

+0

Ack, đánh tôi đi. –

9

Nếu object.width là ít hơn 16

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

thì điều này sẽ tạo ra một chuỗi với một dấu hiệu tiêu cực ở phía trước, đó là bất hợp pháp kể từ chiều rộng phải không âm.

Bạn có thể khắc phục điều này bằng cách nói

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

và tương tự cho chiều cao.

Nhiều trình duyệt bỏ qua nội dung không hợp lệ, nhưng IE ở chế độ nhất định là chặt chẽ hơn, vì vậy bạn có thể chỉ nhận được sự im lặng thất bại ở những người khác.

+0

Tôi đang sử dụng chế độ trình duyệt IE8 ** chuẩn **. Tôi đã khắc phục vấn đề chiều rộng/chiều cao phủ định nhưng cài đặt vị trí không hoạt động. Các mã là ở đây: http://jsfiddle.net/AT825/ Có gì sai với nó? Nhờ tất cả các phản hồi tuyệt vời cho đến bây giờ. – Simon

+0

Bạn có chắc 'getposy' và' getposx' không trả về NaN không? –

+0

Tôi không chắc chắn. Đối với 'hover.style.top = getposy (đối tượng) +" px '"; trình gỡ lỗi IE8 chỉ cho biết một đối số _Invalid Argument_ – Simon

Các vấn đề liên quan