Javascript 将elem.dataset与IE和JSFIDLE一起使用时出现问题

Javascript 将elem.dataset与IE和JSFIDLE一起使用时出现问题,javascript,Javascript,在我在Chrome上创建的这个JSFIDLE中,我发现它无法在IE上工作(我使用的是IE9)。任何与此相关的原因: 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

在我在Chrome上创建的这个JSFIDLE中,我发现它无法在IE上工作(我使用的是IE9)。任何与此相关的原因:

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",
""
];
函数更改bgImage(whichImage){
if(document.body){
document.body.style.background=“url(\”“+backImage[whichImage]+”);
}
}
var buttons=document.querySelectorAll('.bg_swap'),
按钮
对于(变量i=0;i
数据集
在IE中似乎未定义。这可能是问题的主要根源。其他一切在IE9 64位上都可以正常工作

您可以将该状态本地存储在JS中:

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

function register( i ){
    button = buttons[i];
    button.onclick = function() {
        changeBGImage(i);
    };
}
for(变量i=0;i
或者您可以进行查找

for (var i = 0; i < buttons.length; i++) 
    button = buttons[i];
    button.onclick = function() {
        changeBGImage(this.getAttribute('data-index'));
    };
}
for(变量i=0;i
IE<10不支持
元素数据集
。您需要显式获取属性:


将来,您可能需要按F12键并查看控制台以查找错误,因为它指出了问题的原因。

this.dataset.index
在IE上不起作用。请尝试使用
this.getAttribute(“数据索引”)
Jquery有一个
data()
方法,该方法也适用于我测试过的IE版本(IE8和IE10)

检查此处的文档:


旧版本的IE(实际上除了IE11+)无法识别
数据集
属性的原因是,它是在HTML5中引入的,这些版本不支持或仅部分支持它

为了获得这个属性的值,可以使用纯js

changeBGImage(this.attributes.getNamedItem("data-index").value)
或者使用getAttribute()方法更简单:

或jQuery(V1.2.3+):


我有四个超链接,其中包含一个.bg_swap类和一个升序数字索引(数据索引)。当我单击它们时,它们应该将对应于元素索引的页面背景设置为数组索引(backImage).I是Chrome,在IE9上进行了检查,但它不起作用。
此.dataset在IE9中显示为未定义,因此您的onclick处理程序甚至从未调用changeBGImage()你让我开心。谢谢你的回答。+1为你。关于使用和支持的更多细节,mozilla开发者文档很好:正确。我真的不明白为什么人们需要支持过时的浏览器。IE10及以下浏览器的使用率最高为所有浏览器的6.3%,这个低使用率包括Edge和IE11,所以有max. (!)1.4%的旧IE浏览器存在。编写这种向后兼容的代码是浪费时间和金钱的,尤其是因为所有主要浏览器都是免费的,并且都有自动免费更新。最后,jQuery还是修复了它。请参阅:这是在您的客户无法/不允许安装现代浏览器的情况下发生的。例如,一家拥有过时公司的国家机构uters@StanE question创建于2011年,当时可能需要支持。@Guillermanascimento是的,你完全正确。我有时会错过约会,对不起。:-)
changeBGImage(this.getAttribute('data-index'));
changeBGImage(this.attributes.getNamedItem("data-index").value)
changeBGImage(this.getAttribute("data-index"))
$(".bg_swap").click(function(){
    changeBGImage($(this).data("index"));
})