No support for indexOf in IE 8?

11,435

Solution 1

IE versions < 9 don't have indexOf, so you can add your own:

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (elt /*, from*/) {
        var len = this.length >>> 0;
        var from = Number(arguments[1]) || 0;
        from = (from < 0) ? Math.ceil(from) : Math.floor(from);
        if (from < 0) from += len;

        for (; from < len; from++) {
            if (from in this && this[from] === elt) return from;
        }
        return -1;
    };
}

var subItem = [];
subItem[1]="CSMTestPWXListinerService,CSMTestPWXListinerService_ManualyAdded";
console.log(subItem[1].indexOf(","));
//returns 25 

Solution 2

According to http://msdn.microsoft.com/en-us/library/ie/53xtt423(v=vs.94).aspx

MS has said that it support indexof() to IE8 as well!

Share:
11,435
AabinGunz
Author by

AabinGunz

Quiet and fun loving, here to learn and share. :) SOreadytohelp Got to share some amazing things. Thanks SO.

Updated on June 09, 2022

Comments

  • AabinGunz
    AabinGunz almost 2 years

    I have a requirement where I create radio buttons dynamically based upon JSON response. So far what I did works in Chrome and firefox, but gives Object doesn't support this property or method on if(subItem[1].indexOf(",") >= 0) line

    My code

    $("#sList").live("change", function(){
        var currentService=this.value;
        var c1Svc=[];
        var c2Svc=[];
    
        if(absP.length==2)
        {
            $.each(compareServiceData,function(i,item){
    
                if(currentService==item[0])
                {
                    var configCount=0;
                    $.each(item[1],function(j,subItem){
    
                        var temp=subItem[1];
    
                        /*The JSON response contains List of Lists, so here if it contains a list it will be separated by "," so split it and store in a array, else directly store in a array*/
                        if(subItem[1].indexOf(",") >= 0)
                        {
                            var tList=temp.split(",");
                            $.each(tList,function(k,val){
                                if(configCount==0)
                                {
                                    c1Svc.push(val);                                
                                }
                                else
                                {
                                    c2Svc.push(val);                                
                                }
                            });
                        }
                        else
                        {
                            if(configCount==0)
                            {
                                c1Svc.push(subItem[1]);                             
                            }
                            else
                            {
                                c2Svc.push(subItem[1]);                             
                            }
                        }
                        configCount++;
    
                    });
                }
    
            });
    
            if ($("#customServiceListing").length == 0)
            {               
                $("#compareContent").append('<table id="customServiceListing" align="center" width="90%" class="csm-table" border="1"><tbody><tr><td><form id="c1Service"></form></td><td><form id="c2Service"></form></td></tr></tbody></table>');
            }
            else
            {
                $('#c1Service').empty();
                $('#c2Service').empty();
            }
    
        }
        else
        {
            $("#compareContent").append('<table align="center" width="90%" class="csm-table" border="1"><tbody><tr><td><form><select id="c1Service"></select></form></td><td><select id="c2Service"></select></td><td><select id="c3Service"></select></td></tr></tbody></table>');
        }
    
    
        /*adding service radios to config1*/
        $.each(c1Svc,function(i,item){
            $("#c1Service").append('<input type="radio" name="customConfig1ServiceNames" id="'+item+'" value="'+i+1+'"/>'+item);
        });
        if(c1Svc.length>1)
            $("#c1Service").append('<br/>');
    
        /*adding service radios to config2*/
        $.each(c2Svc,function(i,item){
            $("#c2Service").append('<input type="radio" name="customConfig2ServiceNames" id="'+item+'" value="'+i+1+'"/>'+item);
        });
        if(c2Svc.length>1)
            $("#c2Service").append('<br/>');
    });
    

    Update

    Here is a List of various function code not supported by IE8

    Update What is the problem here, for every value it gives me -1 I am using code given by Sudhir

    alert(subItem[1].indexOf(",")+", "+subItem[1]);

    Screenshot

    enter image description here

    Update

    Got it here, var temp=subItem[1].toString(); was the problem, converting it to String worked.