2012-09-05 5 views
0

J'écris une fonction de recherche utilisant Javascript, qui est presque finie et fonctionne bien sur le chrome, mais pas dans l'explorateur. Je l'ai utilisé l'outil de développement de l'explorateur et il m'a dit que c'est la ligne ne peut pas gérer:Javascript ne compilera pas sur IE mais travaillera sur Chrome

if (compareElement.indexOf(compareString)!== -1 && 
    processFindings.indexOf(processes[i]) === -1) 

l'erreur est l'objet ne prend pas en charge cette propriété ou méthode.

la ligne utilisée pour lire:

if(compareElement.indexOf(compareString)!== -1) 

et il a bien fonctionné, ce fut seulement quand j'ai ajouté la condition supplémentaire que l'explorateur ne pouvait pas faire face.

Quelqu'un peut-il m'aider avec ceci?

+0

Bonjour Ryan, IE ne semble pas penser que 'processFindings' est une chaîne. Êtes-vous sûr que c'est un? – zetlen

+0

Je pense que IE est le plus brutal parfois pour JS. juste parce que cela fonctionne dans d'autres navigateurs ne signifie pas qu'il n'y a pas une erreur js. Je pense que @zetlen a raison de vérifier vos types et de s'assurer qu'ils sont des chaînes –

+0

** processFindings ** est un tableau, je pensais qu'il y avait indexOf pour les tableaux? –

Répondre

2

Toutes les versions d'IE n'ont pas. indexOf() méthode pour les tableaux. Il y a un polyfill pour cela qui fonctionne bien.

Voir ici: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

Cela peut causer des problèmes avec le code qui n'itérer pas les tableaux correctement cependant.

+0

Merci, cela a fonctionné parfaitement –

+0

@ jeremy-quels problèmes? – RobG

+0

Certaines personnes parcourent les tableaux en utilisant .forEach ou en utilisant une boucle for in. Le '.indexOf()' ajouté apparaît comme une propriété et est traité. Tout le monde fait une boucle normale sur les index numériques (ce qui est le seul moyen correct) est très bien. –

0

Vous pouvez répliquer la méthode (si ce n'est pas le cas), mais l'utilisation d'un prototype l'obligera à exister avant tout appel. Un exemple:

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(searchElement,fromIndex) { 
     fromIndex = parseInt(fromIndex || 0); 
     for (var i = 0; i < this.length; i++) { 
      if (this[i] == searchElement) return i; 
     } 
     return -1; 
    } 
} 
Questions connexes