2011-08-19 37 views
31

Trong JSFiddle này tôi đã tạo trên Chrome, tôi thấy rằng nó không thể hoạt động trên IE (tôi đang sử dụng IE9). Bất kỳ lý do nào về điều này: http://jsfiddle.net/ZSB67/.Vấn đề khi sử dụng elem.dataset với IE và JSFiddle

var backImage = [ 
    "http://alm7.wikispaces.com/file/view/RedBackground.bmp/144018347/RedBackground.bmp", 
    "http://www.time2man-up.com/wp-content/uploads/2011/07/black-background.jpg", 
    "http://1.bp.blogspot.com/--GorNQoEUxg/TfWPyckVeMI/AAAAAAAAAHk/0208KqQf3ds/s1600/yellow_background.jpg", 
    "" 
    ]; 

function changeBGImage(whichImage) { 
    if (document.body) { 
     document.body.style.background = "url(\"" + backImage[whichImage] + "\")"; 
    } 
} 
var buttons = document.querySelectorAll('.bg_swap'), 
    button; 

for (var i = 0; i < buttons.length; i++) { 
    button = buttons[i]; 
    button.onclick = function() { 
     changeBGImage(this.dataset.index); 
    }; 
} 
+0

Tôi có bốn siêu liên kết với một lớp .bg_swap và chỉ mục (chỉ số dữ liệu) của các số theo thứ tự tăng dần. Khi tôi nhấp vào chúng, chúng được cho là thiết lập nền của trang tương ứng với chỉ mục của phần tử thành chỉ mục của mảng (backImage). Tôi là Chrome và đã kiểm tra trên IE9 và nó không hoạt động. – 0x499602D2

+0

'this.dataset' hiển thị dưới dạng không xác định trong IE9, do đó trình xử lý onclick của bạn thậm chí không bao giờ gọi hàm changeBGImage() –

Trả lời

93

IE không hỗ trợ elem.dataset. Bạn cần phải nhận rõ ràng thuộc tính: http://jsfiddle.net/ZSB67/1/.

changeBGImage(this.getAttribute('data-index')); 

Trong tương lai, bạn có thể muốn nhấn F12 và xem bảng điều khiển vì lỗi, vì nó cho biết điều gì đã gây ra sự cố ở đây.

+3

Bạn đã thực hiện một ngày của mình. Cảm ơn câu trả lời của bạn. 1 cho bạn. –

+1

Nó hoạt động ngay bây giờ trong IE11 và Edge. –

+0

Để biết thêm chi tiết về cách sử dụng và hỗ trợ tài liệu dành cho nhà phát triển mozilla là tốt: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset – Jeremy

3

dataset dường như không được xác định trong IE. Đó có lẽ là nguồn chính của vấn đề. Mọi thứ khác hoạt động tốt trên IE9 64 bit.

Bạn chỉ có thể lưu trữ trạng thái đó tại địa phương trong JS:

for (var i = 0; i < buttons.length; i++) 
    register(i) 

function register(i){ 
    button = buttons[i]; 
    button.onclick = function() { 
     changeBGImage(i); 
    }; 
} 

Hoặc bạn có thể làm một tra cứu

for (var i = 0; i < buttons.length; i++) 
    button = buttons[i]; 
    button.onclick = function() { 
     changeBGImage(this.getAttribute('data-index')); 
    }; 
} 
8

this.dataset.index không hoạt động trên IE. Hãy thử sử dụng this.getAttribute("data-index").

+0

nhưng không hoạt động trong chrome. – andufo

+0

@andufo - Nó hoạt động tốt cho tôi ở đây: https://jsfiddle.net/jfriend00/Ltmuo6we/ – jfriend00

0

Jquery có phương thức data() cũng hoạt động trong phiên bản IE mà tôi đã thử nghiệm (IE8 và IE10).

Kiểm tra tài liệu ở đây:

http://api.jquery.com/data/

6

Lý do tại sao tài sản dataset không được công nhận bởi các phiên bản cũ của trình duyệt IE (trên thực tế tất cả chúng trừ IE11 +) là một thực tế rằng nó đã được giới thiệu trong HTML5 mà các phiên bản đó không hỗ trợ hoặc chỉ hỗ trợ một phần.

Để có được giá trị của thuộc tính này, người ta có thể sử dụng js tinh khiết như

changeBGImage(this.attributes.getNamedItem("data-index").value) 

hoặc đơn giản hơn bằng cách sử dụng các) phương pháp getAttribute (:

changeBGImage(this.getAttribute("data-index")) 

hoặc jQuery (v 1.2.3+):

$(".bg_swap").click(function(){ 
    changeBGImage($(this).data("index")); 
}) 
+0

Đúng. Tôi không thực sự hiểu tại sao mọi người có nhu cầu hỗ trợ các trình duyệt đã lỗi thời. Sử dụng IE10 trở xuống là tối đa. 6.3% của tất cả các trình duyệt và tỷ lệ sử dụng thấp này bao gồm Edge và IE11, do đó, có tối đa. (!) 1.4% trình duyệt IE cũ trên mạng.Viết mã tương thích ngược như vậy là lãng phí thời gian và tiền bạc - đặc biệt là vì tất cả các trình duyệt chính đều miễn phí với các bản cập nhật tự động miễn phí. Cuối cùng, jQuery vẫn sửa nó. Xem: http://www.w3schools.com/browsers/browsers_stats.asp – StanE

+2

Trong trường hợp khách hàng của bạn không thể/được phép cài đặt trình duyệt hiện đại. Ví dụ như một tổ chức nhà nước với các máy tính đã lỗi thời. – meehocz

+0

@StanE câu hỏi được tạo trong năm 2011 ~ tại thời điểm đó có thể cần hỗ trợ. ;) –

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