41

我在我正在处理的一些 JS 代码中遇到了这个问题:

if ( typeof( e.isTrigger ) == 'undefined' ) {
// do some stuff            
}

这似乎是 jQuery 的一部分。据我所知,它会告诉您事件是由用户发起还是自动发起。

这是正确的吗?鉴于它没有记录在案,有没有办法在不隐藏 jQuery API 的情况下找到这些东西?

4

3 回答 3

39

在 jQuery 1.7.2(未缩小)中,第 3148 行包含event.isTrigger = true;嵌套在触发器函数中。所以是的,你是对的 - 这仅在您使用时被标记.trigger()并在内部用于确定如何处理事件。

于 2012-05-22T14:36:46.200 回答
7

如果您查看 jQuery github 项目,在 trigger.js 文件第 49 行(此处链接)中,您可以找到 isTrigger 是如何计算的。

在此处输入图像描述

如果您在 JavaScript 中添加触发器并通过调试,您可以看到断点如何到达此代码行(在 jQuery-2.1.3.js 中检查此 SO 问题

于 2015-11-25T05:37:15.140 回答
1

现代浏览器与自动脚本打开的弹出窗口作斗争,而不是真正的用户点击。如果您不介意立即打开和关闭真实用户点击的窗口并显示自动点击的阻止弹出窗口警告,那么您可以使用这种方式:

button.onclick = (ev) => {

  // Window will be shortly shown and closed for a real user click.
  // For automated clicks a blocked popup warning will be shown.
  const w = window.open();
  if (w) {
    w.close();
    console.log('Real user clicked the button.');
    return;
  }
  console.log('Automated click detected.');
};
于 2019-04-22T11:29:10.850 回答