Не удалось добавить Eventlistner? - PullRequest
0 голосов
/ 22 января 2019

У меня возникла проблема с добавлением Eventlistner в мой YT.player.

var ytapi = document.createElement('script');
ytapi.src = "https://ww" + "w.youtube" + ".com/iframe_api";
var scriptref = document.getElementsByTagName('script')[0];
scriptref.parentNode.insertBefore(ytapi, scriptref);
window.players = [];

function onPlayerStateChange(event) {
    switch(event.data) {
        case YT.PlayerState.ENDED:
            alert('VIDEO IS ENDED');

        case YT.PlayerState.CUED:
            alert('VIDEO IS CUED');

        case YT.PlayerState.PAUSED:
            alert('VIDEO IS PAUSED'); 
            break;
    }
};

window.onYouTubeIframeAPIReady = function() {
    jQuery('iframe[src*="youtube.com"]').each(function() {
        var id = jQuery(this).attr('id');
        window.players[id] = new YT.Player(id);
        window.players[id].addEventListener('onStateChange','onPlayerStateChange');
    });
};

OnStateChange не запускается, но

Если я в консоли браузера выполняю

window.players[id].addEventListener('onStateChange','test');
function test(event){alert(event.data)};

Это работает?

Не работаетЯ делаю то же самое в коде?так почему он работает только в консоли?

1 Ответ

0 голосов
/ 23 января 2019

Это происходит потому, что addEventListener(<string>, <string>) не является функцией, как указано здесь .

Как вы можете прочитать, о втором параметре метода:

Это должен быть объект, реализующий интерфейс EventListener, или функция JavaScript.См. Обратный вызов слушателя событий для деталей о самом обратном вызове.

Таким образом, строка не принята.Возможно, вы намеревались передать ссылку на переменную функции test, а не строку test.

Итак, просто отбросьте кавычки:

addEventListener('onStateChange', test);

Примечание: некоторые функции JavaScript также принимают строкивместо функций, таких как eval и setTimeout.Но использование не рекомендуется

...