【问题标题】:Is there any way to determine if two events were triggered due to the same action?有什么方法可以确定两个事件是否是由于相同的操作而触发的?
【发布时间】:2015-05-23 20:17:27
【问题描述】:

由于表单的不同元素上的事件顺序(请参阅http://jsfiddle.net/fs7norbL/,底部的强制代码),我需要同时处理复选框的 onchange 和 onclick 事件。

我想知道复选框 onchange 和 onclick 事件是否由于相同的人工交互而发生。对于每次人类交互,我可能只处理其中一个(以先到者为准),但需要能够处理这两种事件类型。

event.timestamp 不会因为这个长期存在的开放 mozilla 错误:https://bugzilla.mozilla.org/show_bug.cgi?id=238041。 好像没有其他东西可以用了。

如何确定两个事件是否是由同一人机交互引起的。


<form>
    <input type="checkbox"/>

$(':checkbox').click(function() {
    console.log('checkbox click');
});

$(':checkbox').change(function() {
    console.log('checkbox change');
});

$('form').change(function() {
    console.log('form change');
});

【问题讨论】:

  • 当用户点击复选框时,onchange 不会被触发吗?它会导致复选框更改其状态,因此会发生更改事件。我认为你是我的删除onlick 听众。
  • @zmii onchange 不会在所有浏览器上针对键盘触发的更改(选择输入、按空格键)触发。 onclick 是唯一可靠触发所有可能的人类行为的事件,因此无法删除 onclick

标签: javascript jquery events onclick onchange


【解决方案1】:

您可以在click 处理程序中触发change 事件-> 将回调委托给一个带有一些消息的函数(或添加状态可从clickchange 处理程序访问的局部变量)。

$(':checkbox').click(function() {
    console.log('checkbox clicked');
    this.change();
});

这样你就会知道发生了什么。

【讨论】:

  • 这不会阻止在 Chrome 上的复选框 onclick 之前触发 onchange 事件。
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 2011-01-03
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
相关资源
最近更新 更多