Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript事件日志_Javascript_Logging_Google Chrome Devtools_Dom Events_Firefox Developer Tools - Fatal编程技术网

JavaScript事件日志

JavaScript事件日志,javascript,logging,google-chrome-devtools,dom-events,firefox-developer-tools,Javascript,Logging,Google Chrome Devtools,Dom Events,Firefox Developer Tools,是否有任何方法可以查看JS正在执行哪些事件 例如,假设触发了click事件,然后按下keypress…现在我想记录这些触发的事件 有没有一种方法可以获取这样的触发事件日志(可能是函数名,但这是可选的) 编辑: 我想我需要补充一个细节。我想记录所有事件。如果有一些我不知道的自定义事件,我想知道它的名称。由于这个原因,我不仅不能监视我所知道的某些事件,也不能监视我所不知道的那些事件 编辑2: 日志应该只包含附加了特定侦听器的元素的事件。例如,通过(…)或(testElement.addEventLi

是否有任何方法可以查看JS正在执行哪些事件

例如,假设触发了click事件,然后按下keypress…现在我想记录这些触发的事件

有没有一种方法可以获取这样的触发事件日志(可能是函数名,但这是可选的)

编辑: 我想我需要补充一个细节。我想记录所有事件。如果有一些我不知道的自定义事件,我想知道它的名称。由于这个原因,我不仅不能监视我所知道的某些事件,也不能监视我所不知道的那些事件

编辑2: 日志应该只包含附加了特定侦听器的元素的事件。例如,通过(…)或(
testElement.addEventListener(…)
上的
$(“#测试元素”)。同样,事件的名称是未知的(不必是click/keypress/…。

使用
console.log(“您的文本”)

按浏览器上的
console
部分上的
F12
可以看到此输出。

要在单击时记录事件(用确切的事件目标替换窗口):

要记录日志,请按enter键:

window.addEventListener('keypress', e => {
    let key = e.which || e.keyCode;
    if (key === 13) { // 13 is enter. you may use other numbers for other keys
     console.log('Enter pressed');
   }
});
要记录所有事件,请使用阵列:

['click','mouseover', 'keypress'].forEach(ev => {
    window.addEventListener(ev, () => {
        console.log('event:', ev)
    })
})
可用事件列表:


可以在浏览器控制台(F12)中看到日志。

Chrome建议使用一种监控功能,您可以使用:

如果我没记错,下面的javascript行应该记录所有内容:

monitorEvents(document);
如果只想观看特定事件,可以使用第二个参数:

monitorEvents(document, 'click');

当然,您可以自由地将文档替换为您想要查看的任何对象。

用您想要附加的列表项填充数组,然后记录它们的类型

['click','onkeypress'].forEach( evt => 
        element.addEventListener(evt, log, false)
);

log = (event) => {
    console.log(event.type)
}
你可以试试这个

    var oldListener = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function(type, listener, useCapture, wantsUntrusted ){
        const oldEventHandler = listener;
        listener = function(event){
            EventTarget.log = EventTarget.log || [];
            EventTarget.log.push("day? hour? minute? "+type);
            oldEventHandler(event);
        }
        oldListener.call(this, type, listener, useCapture, wantsUntrusted)
    }

然后在控制台中键入EventTarget.log

我喜欢的是Firefox开发工具。检查图元时,您有一个标签“事件”。通过单击标签,可以看到附加到元素的事件


可能重复的可能重复的可能重复的可能这就是我编辑了一点我的问题后你的情况,因为我认为它遗漏了一个重要的细节。我无法硬编码要监视的内容。我需要监视所有现有事件。即使是那些我不知道的。有没有一种方法可以只为注册的事件侦听器调用它。例如,$('#test').on('click',..)或testElement.addEventListener('click',..)的示例。这个解决方案似乎针对每个调用的事件触发,这是可以理解的,但我希望针对每个注册的事件触发它。我用更多的信息编辑了答案,您可以在我的答案中的链接下找到完整的文档。请注意,
monitorents()
最初是在Firebug中实现的。还有一个。不幸的是,有些事件我没有意识到,因此我无法硬编码事件:/n以这种方式,只需不使用条件(所有键都将被记录)并离开窗口对象即可。比如window.addEventListener('keypress',e=>{console.log('Enter pressed');});我已经将我的回复扩展了一个位,它显示了哪些事件侦听器附加到特定元素,尽管这并没有告诉您其中哪些实际被调用。
    var oldListener = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function(type, listener, useCapture, wantsUntrusted ){
        const oldEventHandler = listener;
        listener = function(event){
            EventTarget.log = EventTarget.log || [];
            EventTarget.log.push("day? hour? minute? "+type);
            oldEventHandler(event);
        }
        oldListener.call(this, type, listener, useCapture, wantsUntrusted)
    }