2011-08-19 25 views
31

के साथ elem.dataset का उपयोग करने में समस्या इस JSFiddle में मैंने क्रोम पर बनाया है, मुझे लगता है कि यह IE पर काम करने में असमर्थ है (मैं IE9 का उपयोग कर रहा हूं)। इस के लिए कोई कारण: http://jsfiddle.net/ZSB67/IE और 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

मेरे पास .bg_swap की कक्षा के साथ चार हाइपरलिंक्स और आरोही क्रम में संख्याओं की एक अनुक्रमणिका (डेटा-इंडेक्स) है। जब मैं उन पर क्लिक करता हूं, तो वे तत्व की अनुक्रमणिका से संबंधित पृष्ठ की पृष्ठभूमि को सरणी (बैक इमेज) के सूचकांक में सेट करना चाहते हैं। मैं क्रोम हूं और आईई 9 पर चेक किया है और यह काम नहीं करता है। – 0x499602D2

+0

'this.dataset' IE9 में अपरिभाषित के रूप में दिखाई दे रहा है, इसलिए आपका ऑनक्लिक हैंडलर कभी भी परिवर्तन को कॉल नहीं करता है BGImage() –

उत्तर

93

आईई elem.dataset का समर्थन नहीं करता क्या कर सकते हैं। आपको स्पष्ट रूप से विशेषता प्राप्त करने की आवश्यकता होगी: http://jsfiddle.net/ZSB67/1/

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

भविष्य में, आप F12 दबाने और त्रुटियों के लिए कंसोल पर देख रहे हैं चाहते हो सकता है, क्योंकि यह कहा है कि समस्या क्या यहाँ पैदा कर रहा था।

+3

आपने मेरा दिन बनाया है। आपके उत्तर के लिए धन्यवाद। आपके लिए +1 –

+1

यह अब आईई 11 और एज में काम करता है। –

+0

मोज़िला डेवलपर दस्तावेज़ों के उपयोग और समर्थन के बारे में अधिक जानकारी के लिए अच्छा है: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset – Jeremy

3

dataset आईई में अपरिभाषित प्रतीत होता है। यह शायद इस मुद्दे का प्रमुख स्रोत है। बाकी सब कुछ IE9 64 बिट पर ठीक काम करता है।

तुम बस कि राज्य स्थानीय रूप से संग्रहीत कर सकता है जे एस में:

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

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

या आप एक देखने

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

this.dataset.index आईई पर काम नहीं करता है। this.getAttribute("data-index") का उपयोग करने का प्रयास करें।

+0

लेकिन यह क्रोम में काम नहीं करता है। – andufo

+0

@andufo - यह मेरे लिए यहां ठीक काम करता है: https://jsfiddle.net/jfriend00/Ltmuo6we/ – jfriend00

0

Jquery में data() विधि है जो आईई संस्करण में परीक्षण करता है जो मैंने परीक्षण किया है (IE8 और IE10)।

प्रलेखन यहाँ देखें:

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

6

कारण है कि dataset संपत्ति IE के पुराने संस्करणों (वास्तव में छोड़कर IE11 + उन सभी को) द्वारा मान्यता प्राप्त नहीं है तथ्य यह है कि यह एचटीएमएल 5 में शुरू किया गया था जो वे संस्करण केवल आंशिक रूप से इसका समर्थन या समर्थन नहीं करते हैं।

आदेश में इस संपत्ति का मूल्य प्राप्त करने के लिए, एक शुद्ध js तरह

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

या सरल getAttribute() विधि का उपयोग कर का उपयोग कर सकते हैं:

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

या jQuery (v 1.2.3+):

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

सही। मैं वास्तव में समझ में नहीं आता कि लोगों को पुराने ब्राउज़र का समर्थन करने की आवश्यकता क्यों है। आईई 10 और नीचे का उपयोग अधिकतम है। सभी ब्राउज़रों में से 6.3% और इस कम उपयोग प्रतिशत में एज और आईई 11 शामिल हैं, इसलिए अधिकतम हैं। (!) 1.4% पुराने आईई ब्राउज़र वहां से बाहर हैं।ऐसे पिछड़े संगत कोड को लिखना समय और धन की बर्बादी है - खासकर जब से सभी प्रमुख ब्राउज़र स्वत: मुफ्त अपडेट के साथ मुक्त होते हैं। अंत में, jQuery इसे वैसे भी ठीक करता है। देखें: http://www.w3schools.com/browsers/browsers_stats.asp – StanE

+2

यह उन मामलों में है जब आपका ग्राहक आधुनिक ब्राउज़र स्थापित करने में सक्षम/सक्षम नहीं है। उदाहरण के लिए पुरानी कंप्यूटर के साथ एक राज्य संस्थान। – meehocz

+0

@StanE प्रश्न 2011 में बनाया गया था ~ उस समय समर्थन की आवश्यकता हो सकती है। ;) –