Как проверить, существует ли обработчик событий с использованием jQuery или JS? - PullRequest
5 голосов
/ 10 октября 2010

Я хочу проверить, доступно ли событие, прежде чем привязывать к нему функцию.Проблема в том, что Google Chrome поддерживает событие «Загруженные метаданные» в элементе «Видео», а FireFox - нет.

Я сделал следующее

$('video').bind('loadedmetadata', videoloaded);
videoloaded();

В Firefox это работало хорошо, но когда я попыталсяв Chrome функция выполнялась дважды (что логично).Я хочу проверить, существует ли loadedmetadata обработчик событий или нет, чтобы запускать функцию только один раз в каждом браузере.

Если такой возможности не существует, какой-нибудь разумный способ обойти это?

1 Ответ

5 голосов
/ 10 октября 2010

Отметьте $video.data("events"), если этот объект содержит ваше событие, поскольку вы используете .bind, все события этого элемента будут сохранены в этом объекте.

var $video = $("#video");
var $ve = $video.data("events");

// checking if a `loadedmetadata` object exists in `data("events")`
if ($ve != null && typeof($ve.loadedmetadata) !== undefined)
{
    // has loadedmetadata event
}

Полная работа пример на jsFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...