2013-07-23 30 views
6

Tôi cần phải tìm một cái gì đó trong Jquery có thể làm việc trong IE8 cũng như các trình duyệt thực. Tôi là người mới sử dụng Jquery, sau đây là mã của tôi hoạt động trong các trình duyệt hiện đại:Những gì để sử dụng thay vì 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]]; 
     } 
    } 

nơi southland.address xuất phát từ mảng bên ngoài. Điều này làm việc hoàn hảo trong Chrome, IE10 và FF, bất cứ điều gì tôi có thể làm cho IE8?

+0

điều gì xảy ra với mã này trong IE8? Nó có ném bất kỳ lỗi nào, hoặc đơn giản là nó không hoạt động âm thầm? –

+1

Có lỗi cú pháp trong dòng 5 của mã này gần 'văn phòng] Object.keys' – DhruvPathak

+0

Chính xác, nó hoàn toàn không có gì. –

Trả lời

10

Để hỗ trợ Object.keys trong các trình duyệt cũ hơn, bạn có thể sử dụng đoạn mã này:

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

hoặc polyfill này (bao gồm miếng chêm khác, cũng):

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

+0

Mã này có cần phải đi ở một địa điểm cụ thể không? Cám ơn rất nhiều. –

+0

Nó sẽ xuất hiện trên trường hợp đầu tiên của bạn bằng cách sử dụng Object.keys, nhưng tốt nhất là nên đi trong vùng "polyfills" của tập lệnh (nơi bạn có thể đặt các phần mềm/tiện ích khác, v.v.) –

+0

Cảm ơn bạn. Trường hợp wordpress bạn có thể dễ dàng thêm nó vào main.js tại thư mục chủ đề hiện tại của bạn. – erm3nda

Các vấn đề liên quan