模拟Shift键加鼠标左键点击

7

有没有一种方法可以模拟Shift + Click的行为?

这段代码在没有按下Shift键时可以很好地工作:

//--- Get the first link that has "stackoverflow" in its URL.
var targetNode = document.querySelector ("a[href*='stackoverflow']");
if (targetNode) {
    //--- Simulate a natural mouse-click sequence.
    triggerMouseEvent (targetNode, "mouseover");
    triggerMouseEvent (targetNode, "mousedown");
    triggerMouseEvent (targetNode, "mouseup");
    triggerMouseEvent (targetNode, "click");
}

function triggerMouseEvent (node, eventType) {
    var clickEvent = document.createEvent ('MouseEvents');
    clickEvent.initEvent (eventType, true, true);
    node.dispatchEvent (clickEvent);
}
1个回答

8

更新:如果您想触发shift + click事件,可以参见此文章

Shift鼠标点击触发

如果您想模拟shift + click,则应使用initMouseEvent而不是initEvent。请查看以下fiddle。

https://jsfiddle.net/zqdftehw/2/

参考文献:

https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent http://marcgrabanski.com/simulating-mouse-click-events-in-javascript/

如果您想知道Shift键是否按下,则以下内容可行:
<div id="test"></div>

<script>
  document.getElementById("test").addEventListener("click", function( event ) {
    if (event.shiftKey) {
        console.log('shift pressed');
    } else {
        console.log('shift not pressed');
    }
  }, false);
</script>

参考文献:https://developer.mozilla.org/en/docs/Web/Events/click

JSFiddle:https://jsfiddle.net/zqdftehw/1/

注意:initEvent和initMouseEvent都已被弃用,因此您可能需要使用其他stackoverflow答案中提供的jQuery解决方案(上述链接)以更安全的方式进行。


1
你提到的jQuery方法存在问题,就是在某些情况下它无法正常工作。有时需要重现整个序列:mouseover、mousedown、mouseup、click。 - user90726

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接