在IE8浏览器中不支持IndexOf

我在我的应用程序中有级联下拉列表,使用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(); } }); 

}

感谢您..

在IE <9中没有实现Array s的indexOf()方法。当你使用jQuery时,你可以使用$.inArray() ,例如

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

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

MDN上indexOf的文档包括一个pollyfill,它将在不支持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; } }