16 votes

jquery split() et indexOf donne "Object doesn't support this property or method" (l'objet ne supporte pas cette propriété ou 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 mettant les ID sélectionnés dans le champ caché.

J'obtiens une erreur indiquant que "l'objet ne prend pas en charge cette propriété ou cette méthode". Je suppose que selected est un tableau, qui devrait supporter indexOf. Est-ce incorrect ?

22voto

Nick Craver Points 313913

Il existe une méthode jQuery pour pallier l'absence de indexOf() vous pouvez utiliser .inArray() au lieu de cela :

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

jQuery.inArray() existe justement pour cette raison... si vous incluez déjà jQuery, il n'est pas nécessaire d'écrire à nouveau la fonction. Remarque : cette fonction renvoie en fait un nombre, comme indexOf() serait.

21voto

Matt Points 21690

D'après votre message d'erreur, je suppose que le problème vient 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 que 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;
  };
}

0voto

Ivo Sabev Points 3333
[].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;
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X