web-dev-qa-db-fra.com

jquery split () et indexOf ont pour résultat "L'objet ne prend pas en charge cette propriété ou cette méthode"

J'ai le code suivant:

var selected = $('#hiddenField').val().split(",");
...
if (selected.indexOf(id) > 0) {
   ... set value ...
}

Je crée dynamiquement une CheckBoxList et j'essaie de me souvenir de l'état des cases à cocher en plaçant les ID sélectionnés dans le champ masqué.

Un message d'erreur s'affiche: "L'objet ne prend pas en charge cette propriété ou cette méthode". Mon hypothèse est que sélectionné est un tableau, qui devrait supporter indexOf. Est-ce incorrect? 

16
chris

Il existe une méthode jQuery pour surmonter le manque de indexOf(), vous pouvez utiliser .inArray() à la place:

var selected = $('#hiddenField').val().split(",");
if ($.inArray(id, selected) > -1) {
   ... set value ...
}

jQuery.inArray() existe uniquement pour cette raison ... si vous incluez déjà jQuery, inutile d'écrire à nouveau la fonction. Remarque: Ceci renvoie en fait un nombre, comme le ferait indexOf().

23
Nick Craver

D'après votre message d'erreur, je suppose que cela provient d'Internet Explorer.

Surprise! Internet Explorer (y compris la version 8) ne prend pas en charge indexOf pour les tableaux.

Voici L'implémentation de Firefox vous pouvez utiliser:

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}
21
Matt
[].indexOf || (Array.prototype.indexOf = function(v,n){
  n = (n==null)?0:n; var m = this.length;
  for(var i = n; i < m; i++)
    if(this[i] == v)
       return i;
  return -1;
});
0
Ivo Sabev