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

Javascript 如何使用jQuery或JS检查事件处理程序是否存在?,javascript,jquery,events,browser,Javascript,Jquery,Events,Browser,在将函数绑定到事件之前,我想检查事件是否可用。 问题是Google Chrome支持视频元素中的“loadedmetadata”事件,而FireFox不支持 我做了以下几件事 $('video').bind('loadedmetadata', videoloaded); videoloaded(); 它在Firefox中运行良好,但当我在Chrome中尝试时,该函数被执行了两次(这是合乎逻辑的)。我想检查loadedmetadata事件处理程序是否存在,是否只在每个浏览器中运行函数一次 如果不

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

我做了以下几件事

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


如果不存在这种可能性,则对此进行任何智能处理?

如果此对象包含您的事件,请检查
$video.data(“事件”)
,因为您正在使用
.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
}

完全工作

@Bruno-我现在比刚开始的时候更困惑:(@Peter:假设他总是使用jQuery绑定事件,这意味着所有事件处理程序都存储在
元素.data(“事件”)上)
。它是一个包含多个对象的对象,其中包含有关事件的信息。例如,元素上的事件
x
;元素
。数据(“事件”)
将返回:
({x:[{handler:(函数(){}),数据:(void 0),命名空间:,类型:“x”,guid:31})
谢谢Bruon,我需要进一步研究一下。它不起作用,至少在FireFox中不起作用,因为即使事件不存在(不由浏览器实现)它将被绑定并添加到该事件对象。因此它将给出错误的结果。不过,我已经找到了一种方法,使用readyState属性。感谢您的输入。@Omar:
loadmetadata
不是标准事件。我还以为您绑定了自定义事件: