2012-01-13 20 views
7

He desplegado el menú desplegable en cascada en mi aplicación, en cascada usando jquery, ahora mi problema es que funciona sin problemas con IE9, Firefox, Opera y Safari, pero no funciona con ninguno de los navegadores como IE7, IE8, etc. .IndexOf no admitido en IE8 Browser

navegaba por el problema y encontré que el error se debe a indexOf en mi código jQuery, lo intenté quitando indexOf pero todavía está dando el mismo error ..

Nota: ¿hay algún trabajo alrededor en el script telerik para eliminar indexOf, porque solo nuevo puedo encontrar indexOf en su script.

A continuación está el código:

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

}

Agradeciendo ..

+1

Podría publicar su código. –

+1

AFAIK, indexOf funciona bien en ie7 y 8. Por favor, muestre un código – Johan

+0

@Archer Dijo que sí funcionaba en ie9, y no en 7 + 8 :) De todos modos, debería funcionar en todos ellos – Johan

Respuesta

26

El método de Array s indexOf() no está implementado en el IE < 9. Como estás usando jQuery puede hacer uso del $.inArray(), por ej.

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

Aquí hay documentación: http://api.jquery.com/jQuery.inArray/.

22

El documentation for indexOf on MDN incluye un pollyfill que agregará compatibilidad en navegadores que no son compatibles con JavaScript 1.6.

Puede soltarlo para evitar tener que volver a escribir el código existente.

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