我只是想知道如何使用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);
  }
}
<a href="http://www.google.com" id="mytest1">test 1</a><br>

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

但它并没有起作用:(

什么好主意吗?


当前回答

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

我们必须使用document.createEvent()创建MouseEvent。 然后使用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>

其他回答

在javascript中,通过它的id或类名抓取元素,然后应用.click()使点击发生 如:

document.getElementById("btnHandler").click();

对我有效的解决方案.... 点击事件可以在点击按钮或从JavaScript文件中调用。 在这段代码中,要么单击按钮显示警报,要么在某些条件下或无条件地调用它

函数ss () { alert (' dddddddddddddddddddddddd '); } var mybtn = . getelementbyid (btn); mybtn.click (); <!DOCTYPE html > < html > < >头 <标题>页面标题< /名称> < / >头 身体< > <h1>这是一个标题</h1> <p>这是一个段落 <button id="btn" onclick="ss()">点击查看</按钮> . < /身体> < / html >

你考虑过使用jQuery来避免所有的浏览器检测吗?使用jQuery,它将像下面这样简单:

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

使用jQuery可以节省大量空间。你只需要使用:

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

[编辑2022]这个答案真的过时了。现代化。原始答案在底部。

使用元素。dispatchEvent使用新创建的所需类型的Event。

下面是一个使用事件委托的例子。

Fork这个stackblitz项目来玩它。

// Note: {bubbles: true} because of the event delegation ... document.addEventListener(`click`, handle); document.addEventListener(`virtualhover`, handle); // the actual 'trigger' function const trigger = (el, etype, custom) => { const evt = custom ?? new Event( etype, { bubbles: true } ); el.dispatchEvent( evt ); }; // a custom event ;) const vHover = new CustomEvent(`virtualhover`, { bubbles: true, detail: `red` }); setTimeout( _ => trigger( document.querySelector(`#testMe`), `click` ), 1000 ); function handle(evt) { if (evt.target.id === `clickTrigger`) { trigger(document.querySelector(`#testMe`), `click`); } if (evt.type === `virtualhover`) { evt.target.style.color = evt.detail; return setTimeout( _ => evt.target.style.color = ``, 1000 ); } if (evt.target.id === `testMe`) { document.querySelector(`#testMeResult`) .insertAdjacentHTML(`beforeend`, `<p>One of us clicked #testMe. It was <i>${evt.isTrusted ? `<b>you</b>` : `me`}</i>.</p>`); trigger( document.querySelector(`#testMeResult p:last-child`), `virtualhover`, vHover ); } } body { font: 1.2rem/1.5rem verdana, arial; margin: 2rem; } #testMe { cursor: pointer; } p { margin: 0.2rem 0; } <div id="testMe"> Test me can be clicked </div> <p><button id='clickTrigger'>Click #testMe</button></p> <div id="testMeResult"></div>

老答案是:

这是我做的。这很简单,但很有效: 函数eventFire(el, etype){ if (el.fireEvent) { 埃尔。fireEvent('on' + etype); }其他{ var evObj = document.createEvent('Events'); evObj。initEvent(etype, true, false); el.dispatchEvent (evObj); } }