2009-10-18 6 views
1

je suis d'essayer ce plugin jquery http://plugins.jquery.com/project/stylish-select-box/Jquery + Prototype en mode noConflict(), Array.prototype.indexOf cassé

cela fonctionne bien, mais avec prototype + jquery en mode noConflict cette fonction a brisé des scripts autres

Array.prototype.indexOf = function (obj, start) { 
     for (var i = (start || 0); i < this.length; i++) { 
      if (this[i] == obj) { 
       return i; 
      } 
     } 
    }; 

une aide?

+0

Array a déjà une méthode indexOf? Pourquoi voudriez-vous le remplacer? BEAUCOUP de scripts vont s'appuyer sur ce comportement attendu –

Répondre

1

Voir https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf

Array dispose déjà d'une méthode indexOf native. Le changer de manière à ne pas produire les mêmes résultats va casser les choses. Heck, même en essayant de remplacer une méthode native peut causer des problèmes pour des méthodes comme hasOwnProperty.

Si vous voulez vraiment cette fonction, renommez-la myIndexOf ou quelque chose pour éviter le conflit.

+0

merci beaucoup! – Davide

+0

pas de soucis. heureux d'aider. –

+0

Je pense que le but de la définition de 'Array.prototype.indexOf' est d'assurer le support de plusieurs navigateurs; certains navigateurs plus anciens ne le supportent pas. Cela dit, il ne devrait être défini que s'il n'est pas natif, et il devrait être défini pour implémenter correctement la spécification. En ce qui concerne 'hasOwnProperty', c'est en fait un garde * contre * ce genre de patch-singe, et c'est seulement nécessaire quand vous changez' Object.prototype' directement. – eyelidlessness

0

Les versions Javascript antérieures à la version 1.6 ne mettent pas en œuvre indexOf (IE6). Cependant, vous pouvez facilement vérifier si indexOf est implémenté:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(obj, start) { 
     // 
    } 
}