【问题标题】:Is it possible to re-create a "onClick event" using custom events in javascript?是否可以使用 javascript 中的自定义事件重新创建“onClick 事件”?
【发布时间】:2015-11-29 22:42:59
【问题描述】:

我正在尝试了解custom events,我很好奇。您可以逐字创建 onClick 事件但写在自定义事件中吗?

ex. 创建一个元素:

<h1 id="clicky">click here</h1>

创建一个和点击事件一样的自定义事件?

obj = document.getElementById('clicky');

obj.addEventListener("fakeClick", function(e) { console.log(e.detail) });


var event = new CustomEvent("fakeClick", {
  detail: {
    hazcheeseburger: true
  }
});

obj.dispatchEvent(event);

这是JSFiddle

【问题讨论】:

  • 由于错误状态,您的处理程序中定义的函数process 未定义。 (obj.addEventListener("fakeClick", function(e) { **process**(e.detail) });)
  • process(e.detail)换成console.log(e.detail),玩得开心
  • @RokoC.Buljan 所以我已经替换为 console.log() 并且不再出现错误。问题是#clicky 元素不可点击?
  • @MatthewHarwood 确定它不可点击。您刚刚创建了一个自定义事件,而不是可点击事件。请阅读developer.mozilla.org/en-US/docs/Web/Guide/Events/…

标签: javascript events onclick custom-events


【解决方案1】:

这取决于您将其设置为“与点击事件相同”的意思。 当您调用 dispatchEvent 时,自定义事件会触发到相应的 Dom 元素(就像您在上面所做的那样)。所以基本上如果你dispatch自定义事件在点击事件处理程序中,那么它基本上模拟点击事件,但似乎没有太多理由这样做。

附言你从小提琴得到的错误是因为你没有定义你在fakeClick事件处理程序中调用的函数process

==========更多细节=========

我的意思是您可以通过以下方式使用自定义事件来“模拟”点击事件,但这实际上并没有达到目的,因为您可以直接使用浏览器点击事件。

var event = new CustomEvent("fakeClick", {
  detail: {
    hazcheeseburger: true
  }
});

obj = document.getElementById('clicky');

obj.addEventListener("click", function () {
    this.dispatchEvent(event);
});

obj.addEventListener("fakeClick", function(e) { console.log(e.detail) });

【讨论】:

  • 我将如何使用“点击事件处理程序”。如果可能的话,我很可能永远不会这样做,只是好奇。
  • @MatthewHarwood 你读过:developer.mozilla.org/en-US/docs/Web/Guide/Events/… 吗?都在那里。
  • 刚刚链接 正在阅读...我看到有 MouseEvent。我会测试一下。
  • 在我的回答@MatthewHarwood 中添加了更多详细信息
猜你喜欢
  • 1970-01-01
  • 2014-06-14
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多