Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

indexOf is not a function in Firefox, Opera but works in IE, indexOf alternative in javascript to test string contains?

Getting an error using indexOf call in Javascript on Firefox and Opera. Works fine in IE.

Following is the error message:

Action

function anonymous(Grid, Row, Col, Event) { 
    return Grid.ActionShowPopupMenu(); 
} 

for event OnRightClick failed with exception: row.id.indexOf is not a function

I'm testing that a string contains another string in Javascript and using the indexOf function of a string. The calls however are being made in JQuery functions. Perhaps that is the reason for the problem? Is there an alternative to using indexOf in Javascript to test if a string contains another string? Is there a workaround for this problem?

like image 304
user840930 Avatar asked Jun 12 '12 08:06

user840930


People also ask

What is indexOf in Javascript?

The indexOf() method returns the position of the first occurrence of a value in a string. The indexOf() method returns -1 if the value is not found. The indexOf() method is case sensitive.

What does indexOf find?

The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.


2 Answers

String.indexOf is perfectly OK in all browsers. I assume the id property of your row object is no string (nor array, btw, because indexOf is also defined on arrays (except for IE))

like image 147
Romain Valeri Avatar answered Sep 21 '22 20:09

Romain Valeri


indexOf is not okay for IE prior to IE9. If you want your code to work in ie < 9, you should define the method for non-compliant browsers in a common js file that can be dropped into every page. See this thread for more details. The code is taken from Mozilla

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;
    }
}
like image 36
ronan_mac Avatar answered Sep 21 '22 20:09

ronan_mac