如何使用JavaScript模拟点击?

时间:2010-04-24 18:10:30

标签: javascript

我只是想知道如何使用JavaScript模拟元素上的点击。

目前我有:

<script type="text/javascript">
function simulateClick(control)
{
    if (document.all)
    {
        control.click();
    }
    else
    {
        var evObj = document.createEvent('MouseEvents');
        evObj.initMouseEvent('click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
        control.dispatchEvent(evObj);
    }
}
</script>

<a href="http://www.google.com" id="mytest1">test 1</a><br>

<script type="text/javascript">
    simulateClick(document.getElementById('mytest1'));
</script>

但它不起作用:(

有什么想法吗?

11 个答案:

答案 0 :(得分:360)

这是我做的东西。这很简单,但它确实有效:

function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('Events');
    evObj.initEvent(etype, true, false);
    el.dispatchEvent(evObj);
  }
}

用法:

eventFire(document.getElementById('mytest1'), 'click');

答案 1 :(得分:294)

如此简单的事情:

document.getElementById('elementID').click();

Supported即使是IE。

答案 2 :(得分:68)

您是否考虑过使用jQuery来避免所有浏览器检测?使用jQuery,它将非常简单:

$("#mytest1").click();

答案 3 :(得分:14)

You could save yourself a bunch of space by using jQuery. You only need to use:

$('#myElement').trigger("click")

答案 4 :(得分:9)

var elem = document.getElementById('mytest1');

// Simulate clicking on the specified element.
triggerEvent( elem, 'click' );

/**
 * Trigger the specified event on the specified element.
 * @param  {Object} elem  the target element.
 * @param  {String} event the type of the event (e.g. 'click').
 */
function triggerEvent( elem, event ) {
  var clickEvent = new Event( event ); // Create the event.
  elem.dispatchEvent( clickEvent );    // Dispatch the event.
}

参考

答案 5 :(得分:7)

最佳答案是最好的!但是,etype = 'click'时,它并没有在Firefox中触发鼠标事件。

所以,我将document.createEvent更改为'MouseEvents'并解决了问题。额外的代码是测试另一部分代码是否干扰了事件,如果它被取消,我会将其记录到控制台。

function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('MouseEvents');
    evObj.initEvent(etype, true, false);
    var canceled = !el.dispatchEvent(evObj);
    if (canceled) {
      // A handler called preventDefault.
      console.log("automatic click canceled");
    } else {
      // None of the handlers called preventDefault.
    } 
  }
}

答案 6 :(得分:1)

模拟事件类似于创建自定义事件。模拟鼠标事件

  • 我们必须使用 MouseEvent 创建 document.createEvent()
  • 然后使用 initMouseEvent(),我们必须设置将要发生的鼠标事件。
  • 然后在您想要模拟事件的元素上分派鼠标事件。

在下面的代码中,我使用了 setTimeout 以便在 1 秒后自动点击按钮。

const div = document.querySelector('div');

div.addEventListener('click', function(e) {
  console.log('Simulated click');
});

const simulatedDivClick = document.createEvent('MouseEvents');

simulatedDivClick.initEvent(
  'click', /* Event type */
  true, /* bubbles */
  true, /* cancelable */
  document.defaultView, /* view */
  0, /* detail */
  0, /* screenx */
  0, /* screeny */
  0, /* clientx */
  0, /* clienty */
  false, /* ctrlKey */
  false, /* altKey */
  false, /* shiftKey */
  0, /* metaKey */
  null, /* button */
  null /* relatedTarget */
);

// Automatically click after 1 second
setTimeout(function() {
  div.dispatchEvent(simulatedDivClick);
}, 1000);
<div> Automatically click </div>

答案 7 :(得分:0)

这没有很好的记录,但是我们可以很简单地触发任何类型的事件。

此示例将触发50次双击按钮:

let theclick = new Event("dblclick")

for (let i = 0;i < 50;i++){
  action.dispatchEvent(theclick) 
}
<button id="action" ondblclick="out.innerHTML+='Wtf '">TEST</button>
<div id="out"></div>

事件接口表示在DOM中发生的事件。

事件可以由用户操作触发,例如点击鼠标 按钮或点击键盘,或由API生成以代表 异步任务的进度。也可以触发 以编程方式,例如通过调用HTMLElement.click()方法 元素,或通过定义事件,然后将其发送到指定的 使用EventTarget.dispatchEvent()定位目标。

https://developer.mozilla.org/en-US/docs/Web/API/Event

https://developer.mozilla.org/en-US/docs/Web/API/Event/Event

答案 8 :(得分:-1)

document.getElementById('elementId')。dispatchEvent(new MouseEvent(“ click”,{bubbles:true,cancellable:true})))

点击此链接可了解使用Javascript和浏览器兼容性的鼠标事件

https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent#Browser_compatibility

答案 9 :(得分:-1)

document.getElementById("element").click()

只需从 DOM 中选择元素。节点有点击功能,可以调用。

document.querySelector("#element").click()

答案 10 :(得分:-2)

const Discord = require("discord.js");
const superagent = require("superagent");

module.exports = {
    name: "hug",
    category: "action",
    description: "hug a user!",
    usage: "hug <user>",
    run: async (client, message, args) => {
    let hugUser = message.mentions.users.first() 
    if(!hugUser) return message.channel.send("You forgot to mention somebody.");
    let hugEmbed2 = new Discord.MessageEmbed()
    .setColor("#36393F")
    .setDescription(`**${message.author.username}** hugged **himself**`)
    .setImage("https://i.kym-cdn.com/photos/images/original/000/859/605/3e7.gif")
     .setFooter(`© Yuki V5.3.1`, "https://cdn.discordapp.com/avatars/489219428358160385/19ad8d8c2fefd03fa0e1a2e49a2915c4.png")
  if (hugUser.id === message.author.id) return message.channel.send(hugEmbed2);
    const {body} = await superagent
    .get(`https://nekos.life/api/v2/img/hug`);

    let hugEmbed = new Discord.MessageEmbed()
    .setDescription(`**${message.author.username}** hugged **${message.mentions.users.first().username}**`)
    .setImage(body.url)
    .setColor("#36393F")
     .setFooter(`© Yuki V5.3.1`, "https://cdn.discordapp.com/avatars/489219428358160385/19ad8d8c2fefd03fa0e1a2e49a2915c4.png")
    message.channel.send(hugEmbed)
}
}