2013-07-23 10 views
6

Potrzebuję znaleźć coś w Jquery, które może pracować w IE8, a także prawdziwe przeglądarki. Jestem nowy na Jquery, oto mój kod, który działa w nowoczesnych przeglądarek:Czego używać zamiast Object.keys()?

$('#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]]; 
     } 
    } 

gdzie southland.address pochodzi z zewnętrznego tablicy. To działa idealnie w Chrome, IE10 i FF, cokolwiek mogę zrobić dla IE8?

+0

co dzieje się z tym kodem w IE8? Czy rzuca jakiś błąd, czy po prostu nie działa po cichu? –

+1

Istnieje błąd składniowy w wierszu 5 tego kodu w pobliżu 'biura] Object.keys' – DhruvPathak

+0

Dokładnie, nie robi absolutnie nic. –

Odpowiedz

10

Wspieranie Object.keys w starszych przeglądarkach, można użyć tego fragmentu:

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; 
    }; 
    })(); 
} 

czy to PolyFill (która obejmuje inne podkładki, jak również):

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

+0

Czy ten kod musi być w określonym miejscu? Dzięki wielkie. –

+0

Powinien pojawić się powyżej pierwszej instancji przy użyciu Object.keys, ale najlepiej powinien przejść do obszaru "polyfills" w twoich skryptach (gdzie możesz umieścić inne podkładki/wtyczki/narzędzia itp.) –

+0

Dziękuję. W przypadku wordpress można go łatwo dodać do main.js w aktualnym folderze motywu. – erm3nda

Powiązane problemy