javascript: onload et onerror appelé ensemble

Je suis nouveau sur le JavaScript et donc dans la confusion de l'étendue de la variable...
Je suis en train de charger une image, et de la remplacer par une autre URL, lorsqu'il n'existe pas.
- Je le faire en JavaScript.

Ici j'ai eu 2 versions extrêmement identiques, mais ils fonctionnent différemment. La seule chose en commun: ils ne travaillent pas. La 3ème version nécessite une actualisation et ne fonctionne pas sous IE. d est l'objet avec le numéro de l'attribut, qui n'a pas de problème.

Voici ce qu'ils ont en commun

.attr("xlink:href", function (d) {
  var img = new Image();

Ici la Version 1: les Deux onload et onerror sont appelés. Cependant d reçoit la src, malheureusement c'est toujours le generic.jpg.

  function onLoadHandler() {
     d.src = "http://.../peopleimages/" + d.num + ".jpg";
     alert(d.name + " onload called");
  }
  function onErrorHandler() {
     d.src = "http://.../images/generic.jpg";
     alert(d.name + " onerror called");
  }
  img.onload = onLoadHandler();
  img.onerror = onErrorHandler();
  img.src = "http://.../peopleimages/" + d.num + ".jpg";
  return d.src;
  }

Ici la Version 2: en Fonction de l'existence de l'image, soit onload ou onerror est appelé. Mais la valeur de d.src est pas défini lorsque l'alerte.

  img.onload = function () {
     alert(d.name + " : loaded");
     d.src = "http://.../peopleimages/" + d.num + ".jpg";
  }
  img.onerror = function () {
     alert(d.name + " : failed");
     d.src = "http://.../images/generic.jpg";
  }

  img.src = "http://.../peopleimages/" + d.num + ".jpg";
  alert(d.src);//undefined
  return d.src;
  }

Ici la Version 3: il fonctionne mais pas la première fois. Je ne actualiser pour afficher correctement les images. Peut-être qu'il retourne avant que l'image est complètement chargé.

  img.src = "http://.../peopleimages/" + d.num + ".jpg";
  return img.complete ? "http://.../peopleimages/" + d.num + ".jpg" : "http://.../images/generic.jpg";
  }

OriginalL'auteur wceo | 2012-09-20