2013-07-23 13 views
6

Ich muss etwas in Jquery finden, das in IE8 sowie echten Browsern funktionieren kann. Ich bin ganz neu in Jquery, die folgende ist mein Code, der in modernen Browsern funktioniert:Was sollte anstelle von Object.keys() verwendet werden?

$('#FIELD_'+office_id).on('change',function(){ 
    offices = $(this).val(); 
for(var i=0; i<=Object.keys(southland.address).length;i++){ 
     if(offices == Object.keys(southland.address)[i]){ 
      address = southland.address[offices]Object.keys(southland.address[offices])[0]]; 
     } 
    } 

wo southland.address von einem externen Array kommt. Das funktioniert perfekt in Chrome, IE10 und FF, alles, was ich für IE8 tun kann?

+0

Was passiert mit diesem Code in IE8? Gibt es einen Fehler, oder es funktioniert einfach nicht im Hintergrund? –

+1

Es gibt einen Syntaxfehler in Zeile 5 dieses Codes in der Nähe von Büros. Object.keys' – DhruvPathak

+0

Genau, tut es absolut nichts. –

Antwort

10

Um Object.keys in älteren Browsern unterstützt, können Sie diese Schnipsel verwenden können:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Compatibility

if (!Object.keys) { 
    Object.keys = (function() { 
    var hasOwnProperty = Object.prototype.hasOwnProperty, 
     hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), 
     dontEnums = [ 
      'toString', 
      'toLocaleString', 
      'valueOf', 
      'hasOwnProperty', 
      'isPrototypeOf', 
      'propertyIsEnumerable', 
      'constructor' 
     ], 
     dontEnumsLength = dontEnums.length; 

    return function (obj) { 
     if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object'); 

     var result = []; 

     for (var prop in obj) { 
     if (hasOwnProperty.call(obj, prop)) result.push(prop); 
     } 

     if (hasDontEnumBug) { 
     for (var i=0; i < dontEnumsLength; i++) { 
      if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]); 
     } 
     } 
     return result; 
    }; 
    })(); 
} 

oder diese polyfill (die andere Beilagen umfasst, als auch):

https://github.com/kriskowal/es5-shim/

+0

Muss dieser Code an einen bestimmten Ort gehen? Vielen Dank. –

+0

Es sollte oberhalb der ersten Instanz von Ihnen mit Object.keys erscheinen, aber vorzugsweise sollte es in einem "Polyfills" Bereich Ihrer Skripte gehen (wo Sie andere Shims/Plugins/Dienstprogramme, etc. setzen können) –

+0

Vielen Dank. Fall von Wordpress können Sie es einfach zu main.js in Ihrem aktuellen Themenordner hinzufügen. – erm3nda

Verwandte Themen