在JavaScript中,event.isTrigger是什么?

43

我在处理一些JS代码时遇到了这个:

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

这似乎是jQuery的一部分。据我所见,它告诉你事件是由用户还是自动触发的。

这样对吗?鉴于它没有被记录在文档中,是否有一种方法可以在不深入研究jQuery API的情况下找出这样的内容?


7
那相当丑陋。"if (!e.isTrigger)" 这样才是正确的写法。如果 jQuery 将其显式设置为“false”,这段代码将会以一种相当混乱的方式损坏。 - user229044
9
由于e.isTrigger没有文件记录,未来版本不保证会保留该功能,因此不应在生产代码中使用。 - rhgb
在jQuery中确实不再可用。 - Kamafeather
3个回答

40
在 jQuery 1.7.2(未压缩)的第3148行中,触发器函数中包含了 event.isTrigger = true;。所以,是的,您是正确的 —— 这只有在使用 .trigger() 时才被标记,并且在内部用于确定如何处理事件。

7

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

enter image description here

如果您在JavaScript中添加一个trigger并进行调试,您会看到断点如何达到此代码行(在jQuery-2.1.3.js中检查这个SO问题)。


2

现代浏览器会抵制由自动化脚本打开的弹出窗口,而不是真实用户的点击。如果您不介意为真实用户的点击迅速打开和关闭一个窗口,并对自动点击显示一个被阻止的弹出窗口警告,则可以使用以下方法:

Original Answer 翻译成“最初的回答”

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.');
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接