我只是想知道如何使用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>
但它不起作用:(
有什么想法吗?
答案 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)
答案 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/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)
}
}