2013-01-22 4 views
0
countImage = data.filter(function(value) { return value !== undefined }).length; 

Cette déclaration renvoie une erreur de L'objet ne supporte pas cette propriété ou cette méthode, comment résoudre le problème? grâceData.filter ne fonctionne pas dans IE 8?

Mise à jour, les données est d'obtenir de ajax et il est un tableau codé en utilisant JSON

$imgArray[] = $dir.DIRECTORY_SEPARATOR.$file.DIRECTORY_SEPARATOR.'Pv'.$filePadded.'.png'; 
die(json_encode($imgArray)); 

data: {'data':issueString}, 
       success: function (data) { 
        countImage = data.filter(function(value) { return value !== undefined }).length; 


.......... 
+0

ce qui est 'data'? –

+0

Désolé. informations manquantes C'est un tableau obtenu à partir d'une requête ajax – user782104

+0

S'il s'agit d'un tableau javascript alors la méthode 'filter' n'est pas disponible dans IE, mais elle est disponible dans Chrome. Il est disponible dans IE 10 si –

Répondre

1

Ce que vous obtenez est un tableau javascript et non un objet jquery si vous appelez la méthode Array.prototype.filter.

Si vous voyez la compatibilité pour IE, il est mentionné qu'il est pris en charge dans IE9 +.

Dans cette page il y a aussi une méthode à utiliser pour les navigateurs qui ne prennent pas en charge Array.prototype.filter

if (!Array.prototype.filter) 
{ 
    Array.prototype.filter = function(fun /*, thisp */) 
    { 
    "use strict"; 

    if (this == null) 
     throw new TypeError(); 

    var t = Object(this); 
    var len = t.length >>> 0; 
    if (typeof fun != "function") 
     throw new TypeError(); 

    var res = []; 
    var thisp = arguments[1]; 
    for (var i = 0; i < len; i++) 
    { 
     if (i in t) 
     { 
     var val = t[i]; // in case fun mutates this 
     if (fun.call(thisp, val, i, t)) 
      res.push(val); 
     } 
    } 

    return res; 
    }; 
} 
1

array.filter() n'est pas disponible pour IE < 10, il est disponible en Chrome, FF et IE 10. Vous devez donc utiliser d'autres alternatives pour filtrer le tableau.

Vous pouvez utiliser jQuery.grep au lieu de la méthode de fitler

code

var a = [1, 2, 3, 4, 5, undefined, 6, 7, undefined, 8]; 
alert(a.length); 
var arr = jQuery.grep(a, function(n, i){ 
    return n != undefined; 
}); 

alert(arr.length); 

fiddle

Questions connexes