ForEach avec IE

sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 - 28 juin 2008 à 16:19
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 - 3 juil. 2008 à 17:47
Bonjour,

Les dernières versions de javascript supportées par  les navigateurs Firefox,Safari,Opera offrent la possibilité d'utiliser forEach (qui permet d'obtenir les éléments d'un tableau les uns aprés les autre sans utiliser d'itérateur, à la manière de son homologue php).

Soit directement : ['foie gras','cagouille','grattin dauphinois'].forEach(function(i){ glups('verre de sancerre',i); });

soit en ayant préalablement écrit :
if (!Array.prototype.forEach) {
    Array.prototype.forEach = function(fn) {
        for (var i in this)
            fn.call(this, this[i], i, this);
    };
}
pour définir forEach au navigateur.

Or c'est là qu'est le probléme, IE refuse obstinément cette définition (tester sous IE7).

D'où deux questions :
Pourquoi ?
Comment peut-on pallier au problème ?

Merci de vos réponses.



Sapakus

3 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
29 juin 2008 à 12:13
Bonjour,

pas réellement pu tester à cause de   fn.call...   c'est quoi le call ?

mais ci-dessous un machin qui peut-être correspond à ce  que tu veux faire ?

<textarea     id='txt'
              style='width:90%;height:50%'></textarea>
<script>
Array.prototype.chaquePoste = function ( executer )
{   for ( var elem=0; elem<this.length; elem++ )
    {    executer( elem, this[elem] );    }
}
new Array( 'un', 'deux', 'trois' ).chaquePoste
    (    function( num, poste )
        {    document.getElementById('txt').value +=   
                '(' +
                num +
                ')=' +
                poste +
                '\r\n';   
        }
    );
</script>

   perso, d'ailleurs, j'avais d'abord mis :


    for ( var elem in this )

    {    if ( elem < this.length )     j'avais du ajouter ça, si qulequ'un peut m'expliquer !( essayez sans )

        {    executer( elem, this[elem] );    }

    }

 

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
30 juin 2008 à 19:50
Bonjour,
il faut aller voir
Référence de
JavaScript 1.5 Core:Objets globaux:Array:forEach

plein d'infos...
;O)
0
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 3
3 juil. 2008 à 17:47
Merci pour vos réponses, je suis "surbouquet" en ce moment et je dois malheureusement différer le suivie de ce post pour pouvoir tester les pistes que vous me proposez. Je dois donc remettre ça à plus tard et vous dit à bientôt.

S
apakus
0
Rejoignez-nous