2011-08-19 16 views
31

私はChromeで作成したこのJSFiddleでは、IEで動作できないことがわかりました(私はIE9を使用しています)。この理由:http://jsfiddle.net/ZSB67/IEとJSFiddleでelem.datasetを使用すると問題が発生する

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

私はハイパーリンクが4つあり、クラスは.bg_swap、数字のインデックス(データインデックス)は昇順になっています。それらをクリックすると、要素のインデックスに対応するページの背景を配列のインデックス(backImage)に設定することになっています。私はChromeでIE9でチェックしても動作しません。 – 0x499602D2

+0

'this.dataset'はIE9では定義されていないと表示されるので、あなたのonclickハンドラはchangeBGImage()を呼び出しません。 –

答えて

93

検索を行うことができます。明示的に属性を取得する必要があります:http://jsfiddle.net/ZSB67/1/。将来的には

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

、あなたはそれがここでの問題を引き起こしていたものと述べているので、F12を押すと、エラーのコンソールを見たい場合があります。

+3

あなたは私の一日を作ったのです。ご回答有難うございます。 +1してください。 –

+1

これはIE11とEdgeで動作します。 –

+0

mozillaの開発者向けドキュメントの使用方法とサポートの詳細については、https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset – Jeremy

3

datasetは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); 
    }; 
} 
をそれとも、IEが elem.datasetをサポートしていません

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

this.dataset.indexはIEでは機能しません。 this.getAttribute("data-index")を使用してください。

+0

を参照してください。ただし、chromeでは機能しません。 – andufo

+0

@andufo - それはここで私にとってうまくいく:https://jsfiddle.net/jfriend00/Ltmuo6we/ – jfriend00

0

Jqueryには、私がテストしたIEバージョン(IE8とIE10)でも動作するdata()メソッドがあります。

ここにドキュメントを参照してください:

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

6

datasetプロパティはIEの古いバージョン(IE11 +を除いて、それらの実際に全て)によって認識されない理由は、それがどのHTML5で導入されたという事実でありますこれらのバージョンでは、サポートされていないか、サポートされていません。

このプロパティの値を得るために、一つのgetAttribute()メソッドを使用して

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

又はsimplierような純粋なJSを使用することができます。

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

またはjQueryの(Vを1.2.3+ ):

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

正しい。とにかく、古いブラウザをサポートする必要があるのはなぜか分かりません。 IE10以降は最大です。すべてのブラウザの6.3%、この低い使用率にはEdgeとIE11が含まれているため、 (!)古いIEブラウザの1.4%。このような下位互換性のあるコードを書くことは、時間とお金の無駄です。特に、すべての主要なブラウザは無料で自動更新されます。最後に、jQueryはそれをとにかく修正します。参照してください:http://www.w3schools.com/browsers/browsers_stats.asp – StanE

+2

あなたの顧客が最新のブラウザをインストールすることができない/できない場合があります。たとえば、古いコンピュータを備えた州立機関。 – meehocz

+0

@StanE 2011年に作成された質問〜その当時サポートが必要な場合があります。 ;) –

関連する問題