indexOf не является функцией в Firefox, Opera, но работает в IE, содержит альтернативу indexOf в javascript для проверки строки?

Получение ошибки при вызове indexOf в Javascript в Firefox и Opera. В ИЕ работает нормально.

Ниже приведено сообщение об ошибке:

Действие

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

для события OnRightClick произошел сбой с исключением: row.id.indexOf не является функцией

Я проверяю, что строка содержит другую строку в Javascript и использует функцию indexOf строки. Однако вызовы выполняются в функциях JQuery. Возможно в этом причина проблемы? Есть ли альтернатива использованию indexOf в Javascript для проверки, содержит ли строка другую строку? Есть ли обходной путь для этой проблемы?


person user840930    schedule 12.06.2012    source источник
comment
indexOf определенно работает в FF. Я использовал его, не зная, как долго. Возможно, проблема связана с объектом, с которым вы его вызываете.   -  person techfoobar    schedule 12.06.2012
comment
Если вы передаете объекты jQuery, особенно если Row является объектом jQ, .id будет неопределенным/нулевым. Либо используйте Row.getAttr('id').indexOf(), либо используйте Row.get(0).id.indexOf(). Если это тоже не удается: Row в объявлении вашей функции пишется с большой буквы, но исключение показывает строчные буквы row. JS чувствителен к регистру   -  person Elias Van Ootegem    schedule 12.06.2012


Ответы (3)


String.indexOf отлично работает во всех браузерах. Я предполагаю, что свойство id вашего объекта row не является строкой (или массивом, кстати, потому что indexOf также определен для массивов (кроме IE))

person RomainValeri    schedule 12.06.2012
comment
да, это была проблема. id не всегда был строкой. Спасибо за все комментарии! - person user840930; 12.06.2012

indexOf не подходит для IE до IE9. Если вы хотите, чтобы ваш код работал в ie ‹ 9, вы должны определить метод для несовместимых браузеров в общем файле js, который можно добавить на каждую страницу. Дополнительные сведения см. в этой теме. Код взят из 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;
    }
}
person ronan_mac    schedule 29.11.2012

indexOf() подходит для всех браузеров. Он предназначен как для строк, так и для массивов, см. здесь: http://jsfiddle.net/SquTp/

Возможно, что-то не так с вашим выбором dom, или вы можете использовать его неправильно.

person Someth Victory    schedule 12.06.2012