【问题标题】:jQuery - Object doesn't support this property or method in IE8jQuery - 对象在 IE8 中不支持此属性或方法
【发布时间】:2013-03-01 12:50:08
【问题描述】:

我在我的一个项目中实现了便签功能,但我发现了一个与浏览器兼容性相关的问题。我的代码在 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);
    });

任何有关问题的帮助将不胜感激。

【问题讨论】:

    标签: jquery internet-explorer-8


    【解决方案1】:

    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

    【讨论】:

    • @EktaPatel 很高兴它成功了!您应该考虑通过单击该问题左侧的复选标记来接受对您最有用的答案。你可以阅读更多关于为什么你应该接受here的答案。
    【解决方案2】:

    查看此链接可能会对您有所帮助... IndexOf 仅适用于某些浏览器..

    How to fix Array indexOf() in JavaScript for Internet Explorer browsers

    【讨论】:

      【解决方案3】:

      IE

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        相关资源
        最近更新 更多