2013-03-01 71 views
2

我在其中一個項目中實現了便籤功能,並且發現了與瀏覽器兼容性相關的問題。我的代碼在IE8中不起作用,但在其他瀏覽器中可以正常工作。jQuery - 對象不支持IE8中的此屬性或方法

我得到的錯誤是:

Message: Object doesn't support this property or method 
Line: 45 
Char: 3 
Code: 0 
URI: http://dev.mesocial.co/orange_theme/js/sticky_note_func.js 

這些都是沒有40至50之間的線路:

var moved = function(note) { 

    // added by rupesh 
    // alert(JSON.stringify(lastCreatedNoteId)); 
    var passId = note.id 
    if(lastCreatedNoteIdForJs.indexOf(note.id) != -1) 
     passId = lastCreatedNoteId[note.id]; 
    // till here /////// 
    $.post(SITE_URL+'/dashboard/create-sticky-note/act/moved/sticky_note_id/'+passId+'/pos_x/'+note.pos_x+'/pos_y/'+note.pos_y, 
    function(data) { 
     //alert(data); 
    }); 

什麼問題可能是任何幫助將非常感激。

回答

7

IE8不支持.indexOf()。在Internet Explorer中,它首先與IE9一起推出。

由於您使用的是jQuery,因此可以使用$.inArray()方法。

這樣的事情,你的情況:

if($.inArray(note.id, lastCreatedNoteIdForJs) != -1) 

支持舊的瀏覽器沒有jQuery的:

如果你想使用傳統的瀏覽器.indexOf()還有,你用你自己的陣列 - 原型時需要。原型將是這個樣子:

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
    "use strict"; 
    if (this == null) { 
     throw new TypeError(); 
    } 
    var t = Object(this); 
    var len = t.length >>> 0; 

    if (len === 0) { 
     return -1; 
    } 
    var n = 0; 
    if (arguments.length > 1) { 
     n = Number(arguments[1]); 
     if (n != n) { // shortcut for verifying if it's NaN 
     n = 0; 
     } else if (n != 0 && n != Infinity && n != -Infinity) { 
     n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
     } 
    } 
    if (n >= len) { 
     return -1; 
    } 
    var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 
    for (; k < len; k++) { 
     if (k in t && t[k] === searchElement) { 
     return k; 
     } 
    } 
    return -1; 
    } 
} 

上面的例子是從MDN article採取Array.prototype.indexOf

+0

感謝克里斯託弗這對我的作品。 – 2013-03-04 09:21:42

+0

@EktaPatel很高興工作!您應該考慮接受對您最有用的答案,方法是單擊該問題左側的複選標記。你可以閱讀更多關於爲什麼你應該接受一個答案[這裏](http://stackoverflow.com/faq#howtoask)。 – 2013-03-04 10:09:56

0

IE < 9不支持陣列.indexOf方法。

jQuery有一個方法可以讓你檢查元素是否在數組中。

if($.inArray(note.id, lastCreatedNoteIdForJs) !== -1) { 
    passId = lastCreatedNoteId[note.id]; 
} 

你也可以在方法添加到Array對象:How to fix Array indexOf() in JavaScript for Internet Explorer browsers

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(obj, start) { 
     for (var i = (start || 0), j = this.length; i < j; i++) { 
      if (this[i] === obj) { return i; } 
     } 
     return -1; 
    } 
} 
相關問題