2012-06-12 16 views
8

Obteniendo un error usando la llamada de indexOf en Javascript en Firefox y Opera. Funciona bien en IE.indexOf no es una función en Firefox, Opera pero funciona en IE, ¿tiene indexOf alternative en javascript to test string?

A continuación se presenta el mensaje de error:

Acción

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

para el evento OnRightClick con excepción: row.id.indexOf no es una función

Estoy probando que contiene una cadena otra cadena en Javascript y usando la función indexOf de una cadena. Sin embargo, las llamadas se realizan en funciones de JQuery. Tal vez esa es la razón del problema? ¿Hay alguna alternativa al uso de indexOf en Javascript para probar si una cadena contiene otra cadena? ¿Hay alguna solución alternativa a este problema?

+2

indexOf definitivamente funciona en FF. Lo he usado por no estar seguro de cuánto tiempo ... Puede ser un problema con el objeto con el que lo llamas. – techfoobar

+0

Si está pasando objetos jQuery, especialmente si 'Row' es un objeto jQ,' .id' estará indefinido/nulo. Utilice "Row.getAttr ('id'). IndexOf()' o use 'Row.get (0) .id.indexOf()'. Si eso también falla, 'Row' aparece en mayúscula en la declaración de su función, pero la excepción muestra una' row' minúscula. JS es CaseSensitive –

Respuesta

7

String.indexOf está perfectamente bien en todos los navegadores. Asumo la Identificación propiedad de su fila objeto es ninguna cadena (ni matriz, por cierto, porque indexOf también se define en matrices (excepto para IE))

+0

sí, ese era el problema. id no siempre fue una cadena. ¡Gracias por todos los comentarios! – user840930

0

indexOf() es aceptable para todos los navegadores. Está diseñado para ambos, String y Array, vea esto: http://jsfiddle.net/SquTp/

Quizás haya algo mal con su selección dom, o puede usarlo de la manera incorrecta.

+0

no funciona en Fr0zenFyr

3

indexOf no está bien para IE antes de IE9. Si desea que su código funcione, por ejemplo, < 9, debe definir el método para los navegadores no compatibles en un archivo js común que se puede colocar en cada página. Vea this thread para más detalles. El código está tomado de 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; 
    } 
}