Ключ к проблеме заключается в том, что событие «load» срабатывает только на изображениях, когда изображение успешно загружено - поэтому, если вы укажете неверный путь, событие загрузки никогда не произойдет.Вместо этого вам нужен обработчик «ошибки», например:
var img = $("<img id='pic' src='/dynamically/created/path/to/img.jpg'>")
.error(function(){
$(this).attr({src: 'img/missing.jpg'})
.css({width:'100px', height:'100px'});
})
.appendTo('.imgContainer');
Я немного упростил ваш код - так что порядок таков: создайте элемент изображения, свяжите обработчик события ошибки, затем добавьте кдокумент.Я не знаю, имеет ли это какое-либо практическое значение, но, похоже, имеет смысл установить обработчики до того, как образ сможет начать загрузку (в противном случае загрузка теоретически может произойти до того, как будет назначено ваше событие).
Кроме того, проверка ширины == 0 и высоты == 0 будет работать не во всех браузерах.Chrome и Safari отображают ширину и высоту значка «разорванное изображение», которое они показывают: 18x18 пикселей.