【问题标题】:How do i simulate a click or keydown event?如何模拟单击或按键事件?
【发布时间】:2011-01-18 14:15:07
【问题描述】:

我需要模拟点击或鼠标事件。我尝试了各种方法,但我使用的 lib 似乎没有响应或响应,但仅在特定浏览器上响应。 ATM 我做 $('#target').val($('#target2').val());适用于Firefox和Opera。在 chrome、IE8 和 safari 上失败。

我可以将事件添加到库中,但我不知道要添加哪个事件(或如何正确添加)。无论如何我该如何解决这个问题?基本上我正在使用 .val() 设置 textarea 文本,而 lib 似乎没有接收到该事件。

【问题讨论】:

  • “库”是什么意思?什么图书馆?当您设置 textarea 文本时,您期望发生什么? $('#target').val($('#target2').val()); 与 click 或 keydown 事件无关,它只是将某物的值设置为等于其他某物的值..
  • @Shadow Wizard:是的,正如我提到的,我正在使用的库没有接收到事件。我需要触发事件,代码才能正常工作
  • 对什么?你没有回答我的任何问题,也没有是/否..

标签: javascript events keydown


【解决方案1】:

您可以使用 DOM Level 2 事件模型,例如:

function simulateClick(element) {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  cb.dispatchEvent(element);
}

演示:http://www.jsfiddle.net/4yUqL/66/

这将真正模拟一个元素上的鼠标点击。不管事件是如何绑定的。

【讨论】:

  • 这不起作用,但 KeyboardEvent 起作用了 :)。公认! var evt = document.createEvent("KeyboardEvent"); evt.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 0, 0); element.dispatchEvent(evt);
  • @qwertymk:对我有用。在除 IE 之外的所有浏览器中 (8)
  • 好吧,我不太确定它已经实现了多少浏览器。 FireFox 3.6.13 很适合我。
  • @qwertymk:这个对你有用吗?我还没有尝试让这个 FF 兼容。 jsfiddle.net/4yUqL/71
  • @qwertymk:奇怪,答案链接对我很有用。我唯一能想到的是 javascript 在 Firefox 或插件中被阻止或禁用。
【解决方案2】:
jQuery 中的

.trigger('click') 可能会实现您想要做的事情。它将触发附加到 click 事件的所有处理程序。

【讨论】:

  • OP 使用 .val() 暗示 jQuery。
  • @jAndy,不过问题中看起来像是 jQuery 代码。
  • 它不起作用。我怀疑它只会触发通过 jquery 获取的事件
  • 投反对票有点不合逻辑,但无论如何。它只适用于 jQuery 事件,所以如果你有$('something').click(function(){});,你可以使用$('something').trigger('click');
【解决方案3】:

如果有人遇到这种情况,正在寻找一种与框架无关的方式来触发任何 HTML 和鼠标事件,请看这里:How to simulate a mouse click using JavaScript?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多