2011-08-19 14 views
31

In questo JSFiddle che ho creato su Chrome, trovo che non è possibile lavorare su IE (sto usando IE9). Qualsiasi motivo a riguardo: http://jsfiddle.net/ZSB67/.Problema utilizzando elem.dataset con IE e 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

Ho quattro hyperlink con una classe di .bg_swap e un indice (indice dei dati) di numeri in ordine crescente. Quando faccio clic su di essi, si suppone che impostino lo sfondo della pagina corrispondente all'indice dell'elemento all'indice dell'array (backImage). Sono Chrome e ho controllato su IE9 e non funziona. – 0x499602D2

+0

'this.dataset' viene visualizzato come non definito in IE9, quindi il gestore onclick non chiama mai la modificaBGImage() –

risposta

93

IE non supporta elem.dataset. Dovresti ottenere esplicitamente l'attributo: http://jsfiddle.net/ZSB67/1/.

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

In futuro, si potrebbe desiderare premendo F12 e guardando la console per gli errori, dal momento che ha detto cosa stava causando il problema qui.

+3

Hai fatto la mia giornata. Grazie per la tua risposta. +1 per te. –

+1

Funziona ora in IE11 e Edge. –

+0

Per ulteriori dettagli sull'utilizzo e il supporto, i documenti dello sviluppatore di mozilla sono validi: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset – Jeremy

3

dataset sembra non definito in IE. Questa è probabilmente la principale fonte del problema. Tutto il resto funziona perfettamente su IE9 64 bit.

Si potrebbe semplicemente archiviare quello stato a livello locale in JS:

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

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

Oppure si può fare una ricerca

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

this.dataset.index non funziona su IE. Prova a utilizzare this.getAttribute("data-index").

+0

ma questo non funziona in chrome. – andufo

+0

@andufo - Funziona bene per me qui: https://jsfiddle.net/jfriend00/Ltmuo6we/ – jfriend00

0

Jquery ha un metodo data() che funziona anche nella versione IE che ho testato (IE8 e IE10).

Controllare la documentazione qui:

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

6

Il motivo per cui la proprietà dataset non è riconosciuto da vecchie versioni di IE (in realtà tutti loro, tranne IE11 +) è il fatto che è stato introdotto in HTML5 che quelle versioni non supportano o supportano solo parzialmente.

Per ottenere il valore di questa proprietà, si può usare js puri come

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

o più semplice utilizzando il metodo getAttribute():

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

o jQuery (v 1.2.3+):

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

corretto. Non capisco davvero perché la gente abbia comunque bisogno di supportare browser obsoleti. L'utilizzo di IE10 e di seguito è max. Il 6,3% di tutti i browser e questa bassa percentuale di utilizzo include Edge e IE11, quindi ci sono max. (!) 1,4% dei vecchi browser IE là fuori.Scrivere questo codice compatibile con le versioni precedenti è uno spreco di tempo e denaro, soprattutto perché tutti i principali browser sono gratuiti con aggiornamenti automatici gratuiti. Infine, jQuery lo risolve comunque. Vedi: http://www.w3schools.com/browsers/browsers_stats.asp – StanE

+2

È nei casi in cui il tuo cliente non può/può installare un browser moderno. Ad esempio un'istituzione statale con computer obsoleti. – meehocz

+0

@StanE domanda creata nel 2011 ~ in quel momento potrebbe essere necessario il supporto. ;) –

Problemi correlati