IE8浏览器不支持IndexOf函数

9
我在我的应用程序中使用jQuery实现了级联下拉框,并且在IE9,Firefox,Opera和Safari中可以平稳运行。但是,在IE7,IE8等浏览器中无法正常工作。
我查找了该问题并发现错误是由于我的jQuery代码中的indexOf引起的。我尝试删除indexOf,但仍然出现相同的错误。
注意:在telerik脚本中是否有任何解决indexOf的方法?因为我只能在它们的脚本中找到indexOf。
以下是代码:
function OnClientSelectedIndexChanged(sender, eventArgs) {
var senderId = sender.get_id().toString();

var uniqueName = senderId.substring(senderId.lastIndexOf('_'), senderId.length);

if(senderId.indexOf("drpdwnCondition") > 0)
{
   return false;
}

var selectedItem = eventArgs.get_item();
var selectedValue = selectedItem.get_value().split('_');
$.ajax({ type: "POST", async: true,
    url: "/SalesRepresentativeMonitoring.aspx/GetData", contentType: "application/json; charset=utf-8",
    data: "{value:" + JSON.stringify(selectedValue[1]) + "}", dataType: "json",
    success: function (msg) {
        var resultAsJson = msg.d // your return result is JS array
        // Now you can loop over the array to get each object
        var cnditionCombo = $find("ctl00_ContentPlaceHolder1_radDock_C_Filter_drpdwnCondition" + uniqueName.toString());
        cnditionCombo.clearSelection();
        cnditionCombo.trackChanges();
        cnditionCombo.clearItems();
        for (var i in resultAsJson) {
            //alert(resultAsJson[i]);
            var item = new Telerik.Web.UI.RadComboBoxItem();
            item.set_text(resultAsJson[i]);
            item.set_value(resultAsJson[i]);
            cnditionCombo.get_items().add(item);
        }
        var itemAtIndex = cnditionCombo.get_items().getItem(0);  //get item in detailCB
        itemAtIndex.select();
        cnditionCombo.commitChanges();
    }
});

感谢您的关注。


1
请问您能否发布您的代码。 - Rory McCrossan
1
据我所知,indexOf在ie7和8中运行良好。请展示一些代码。 - Johan
@Archer 他说在ie9中可以工作,而不是7+8 :) 不管怎样,它应该在所有版本中都能正常工作 - Johan
Arrays的indexOf方法在IE < 9中没有实现,所以我认为这就是OP所指的。 - Tim Down
我是在提到字符串的indexOf方法。至于数组,你可以随时使用jQuery的$.inArray方法。 - Johan
显示剩余2条评论
2个回答

26

ArrayindexOf() 方法在 IE < 9 中没有实现。由于您正在使用 jQuery,因此可以使用 $.inArray() 方法,例如:

var arr = ["foo", "bar", "baz"],
    bazIndex = $.inArray("baz", arr), // 2
    doesntExistIndex = $.inArray("notThere", arr); // -1

这里是文档:http://api.jquery.com/jQuery.inArray/


22
MDN上indexOf的文档包括一个polyfill,可以在不支持JavaScript 1.6的浏览器中添加支持。您可以直接使用它而无需重写现有代码。
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 > 0) {
            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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接