如何使用jQuery或JS检查事件处理程序是否存在?

时间:2010-10-09 22:05:09

标签: javascript jquery events browser

我想在将函数绑定到它之前检查事件是否可用。 问题是Google Chrome支持Video元素中的“loadedmetadata”事件而FireFox则不支持。

我做了以下

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

它在Firefox中运行良好但是当我在Chrome中尝试时,该功能执行了两次(这是合乎逻辑的)。我想检查是否存在loadedmetadata事件处理程序,以便在每个浏览器中只运行一次该函数。

如果不存在这种可能性,那么任何明智的工作都可以解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

检查$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
}

正常工作example on jsFiddle