2013-03-01 89 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; 
    } 
} 
相关问题