2011-08-19 14 views
31

En este JSFiddle que creé en Chrome, me parece que no puedo trabajar en IE (estoy usando IE9). Cualquier motivo relacionado con esto: http://jsfiddle.net/ZSB67/.Problema al utilizar elem.dataset con IE y 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

Tengo cuatro hipervínculos con una clase de .bg_swap y un índice (índice de datos) de números en orden ascendente. Cuando hago clic en ellos, se supone que deben establecer el fondo de la página correspondiente al índice del elemento en el índice de la matriz (imagenAtrás). Soy Chrome y comprobé en IE9 y no funciona. – 0x499602D2

+0

'this.dataset' se muestra como indefinido en IE9, por lo que su controlador onclick nunca llama al changeBGImage() –

Respuesta

93

IE no soporta elem.dataset. Tendría que obtener explícitamente el atributo: http://jsfiddle.net/ZSB67/1/.

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

En el futuro, es posible que desee presionando F12 y mirando a la consola de errores, ya que dijo lo que estaba causando el problema aquí.

+3

Usted hizo mi día. Gracias por tu respuesta. +1 para ti. –

+1

Funciona ahora en IE11 y Edge. –

+0

Para obtener más detalles sobre el uso y el soporte, los documentos para desarrolladores de mozilla son buenos: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset – Jeremy

3

dataset parece no estar definido en IE. Esa es probablemente la principal fuente del problema. Todo lo demás funciona bien en IE9 64 bit.

Se podía almacenar ese estado a nivel local en JS:

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

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

O bien, puede hacer una búsqueda

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

this.dataset.index no funciona en IE. Intenta usar this.getAttribute("data-index").

+0

pero eso no funciona en Chrome. – andufo

+0

@andufo - Funciona bien para mí aquí: https://jsfiddle.net/jfriend00/Ltmuo6we/ – jfriend00

0

Jquery tiene un método data() que también funciona en la versión IE que he probado (IE8 e IE10).

Consulte la documentación aquí:

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

6

La razón por la propiedad dataset no es reconocido por versiones antiguas de IE (en realidad todos ellos, excepto EI11 +) es el hecho de que se introdujo en HTML5, que esas versiones no lo admiten ni lo admiten solo parcialmente.

el fin de obtener el valor de esta propiedad, se puede utilizar js puros como

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

o simplier utilizando el método getAttribute():

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

o jQuery (v 1.2.3+):

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

Correcto. Realmente no entiendo por qué las personas tienen la necesidad de soportar navegadores obsoletos de todos modos. El uso de IE10 y abajo es max. 6.3% de todos los navegadores y este bajo porcentaje de uso incluye Edge e IE11, por lo que hay max. (!) 1.4% de los viejos navegadores IE que hay.Escribir un código compatible con versiones anteriores es una pérdida de tiempo y dinero, especialmente debido a que todos los principales navegadores son gratuitos con actualizaciones gratuitas automáticas. Finalmente, jQuery lo arregla de todos modos. Consulte: http://www.w3schools.com/browsers/browsers_stats.asp – StanE

+2

Es en los casos en que su cliente no puede/no permite instalar un navegador moderno. Por ejemplo, una institución estatal con computadoras desactualizadas. – meehocz

+0

@StanE pregunta creada en 2011 ~ en ese momento es posible que se necesite ayuda. ;) –

Cuestiones relacionadas