【问题标题】:Find all blur() events executed for any element on page load查找页面加载时为任何元素执行的所有 blur() 事件
【发布时间】:2012-02-13 23:35:09
【问题描述】:

我正在使用其他人不久前编写的 HTML/jQuery 页面。为了调试,我需要找到所有在页面加载时为任何元素触发的 .blur() 事件。

我可以使用以下方法将事件绑定到所有元素:

$("*").each(function() {
     $(this).blur(function() {
         alert(this);
     });
});

但是这不起作用(即使我可以在页面加载之前运行它),因为页面上的脚本无论如何都会重新绑定 .blur() 事件。

有没有办法让我看到在页面加载时执行了哪些 .blur() 事件?我想我可能能够在运行时覆盖 .blur() 内部 jQuery 函数,而不会被模糊事件绑定覆盖,但不确定是否可能。

【问题讨论】:

  • 我仍然不完全确定你在问什么。您想将自己的blur 事件附加到所有元素(这对调试有什么帮助?)?您是否想要一个附有blur 事件处理程序的所有元素的列表?或者您想知道在页面加载完成后哪些元素的blur 事件处理程序被触发?
  • @Anthony 第三个选项正是我需要做的:)
  • 在这种情况下,@RobW 的回答可能可以满足您的需求。在一个元素上多次调用.blur()(或.click() 等)不会覆盖之前添加的处理程序。但是,如果现有的 jQuery 代码(无论出于何种原因)确实执行了$('selector').unbind('blur').blur(function(e) {...});,您可能会在找到附加通用处理程序的正确位置时遇到问题。
  • 实际上,只是为了澄清一下——我们所说的是程序触发(即$('selector').trigger('blur');$('selector').blur())还是通过用户与页面的交互触发?
  • @Anthony 以编程方式触发。

标签: jquery firebug monkeypatching


【解决方案1】:

使用.on('blur', '*', ...) (jQuery 1.7+) 将blur 事件绑定到document

$(document).on('blur', '*', function(e) {
    e.stopPropagation(); // Otherwise, many alerts will pop up for each event
    alert(this);
});

如果您没有 jQuery 1.7+,请改用 delegate

$(document).delegate('*', 'blur', function(e) {
    e.stopPropagation(); // Otherwise, many alerts will pop up for each event
    alert(this);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    相关资源
    最近更新 更多