Поймайте событие загрузки из iframes, используя делегирование jQuery [duplicate]

<script type="text/javascript">
// front end cache bust

var cacheBust = ['js/StrUtil.js', 'js/protos.common.js', 'js/conf.js', 'bootstrap_ECP/js/init.js'];   
for (i=0; i < cacheBust.length; i++){
     var el = document.createElement('script');
     el.src = cacheBust[i]+"?v=" + Math.random();
     document.getElementsByTagName('head')[0].appendChild(el);
}
</script> 
15
задан Damjan Pavlica 26 September 2016 в 17:37
поделиться

5 ответов

Событие load / onload не пузырится ( ссылка , ссылка ), поэтому то, что вы просите, невозможно. Вам нужно будет привязать обработчик событий к каждому узлу изображения.

10
ответ дан bfavaretto 15 August 2018 в 21:59
поделиться
Array.prototype.forEach.call(document.querySelectorAll('img'), function (elem) {
    elem.addEventListener('load', function () {
        this.style.display = 'inline';
    });
    if (elem.complete) {
        elem.style.display = 'inline';
    }
});

Событие «load» не будет срабатывать, если изображение уже загружено случайно; таким образом, мы проверяем, установлен ли complete.

2
ответ дан Explosion Pills 15 August 2018 в 21:59
поделиться

Вы можете использовать обработчик события Image.onload, но не задействовано.

var i = new Image;
i.onload = function() {
  this.style.display = 'block';
}
1
ответ дан marekful 15 August 2018 в 21:59
поделиться

Использовать захват прослушивателя событий на каком-то узле DOM, отличном от window (body или другого родителя интересующих элементов изображения):

document.body.addEventListener(
    'load',
    function(event){
        var tgt = event.target;
        if( tgt.tagName == 'IMG'){
            tgt.style.display = 'inline';
        }
    },
    true // <-- useCapture
)

При этом вам не нужно (re ) присоединить обработчики событий при повторении через document.images.

И это будет работать и с динамически вставленными изображениями.

То же самое верно для событий загрузки изображения error. MDN: addEventListener

42
ответ дан myf 15 August 2018 в 21:59
поделиться
  • 1
    Я никогда не думал попробовать это для делегирования событий загрузки изображений. Совершенно блестяще! И причина, по которой это не может быть окно: «По причинам, связанным с наследием, события загрузки для ресурсов внутри документа (например, изображений) не включают Окно в пути распространения в реализациях HTML». – Adria 19 January 2015 в 21:26
$('img').on('load', function() {
    $(this).show()
})

Без библиотек:

window.onload = function() {
   var imgs = document.querySelectorAll('img')
   imgs.onload = function() {
      this.style.display = 'inline';
   }
}
0
ответ дан Neal 15 August 2018 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: