当前位置: 首页 > 面试题库 >

如何使用JavaScript模拟鼠标单击?

郑曜灿
2023-03-14
问题内容

我知道这种document.form.button.click()方法。但是,我想知道如何模拟onclick事件。

我在堆栈溢出的某个地方找到了此代码,但我不知道如何使用它:(

function contextMenuClick()
{
    var element= 'button'

    var evt = element.ownerDocument.createEvent('MouseEvents');

    evt.initMouseEvent('contextmenu', true, true,
         element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
         false, false, false, 1, null);

    element.dispatchEvent(evt);
}

如何使用JavaScript触发鼠标单击事件?


问题答案:

(修改后的版本使之无需prototype.js即可工作)

function simulate(element, eventName)
{
    var options = extend(defaultOptions, arguments[2] || {});
    var oEvent, eventType = null;

    for (var name in eventMatchers)
    {
        if (eventMatchers[name].test(eventName)) { eventType = name; break; }
    }

    if (!eventType)
        throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');

    if (document.createEvent)
    {
        oEvent = document.createEvent(eventType);
        if (eventType == 'HTMLEvents')
        {
            oEvent.initEvent(eventName, options.bubbles, options.cancelable);
        }
        else
        {
            oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView,
            options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
            options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element);
        }
        element.dispatchEvent(oEvent);
    }
    else
    {
        options.clientX = options.pointerX;
        options.clientY = options.pointerY;
        var evt = document.createEventObject();
        oEvent = extend(evt, options);
        element.fireEvent('on' + eventName, oEvent);
    }
    return element;
}

function extend(destination, source) {
    for (var property in source)
      destination[property] = source[property];
    return destination;
}

var eventMatchers = {
    'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
    'MouseEvents': /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/
}
var defaultOptions = {
    pointerX: 0,
    pointerY: 0,
    button: 0,
    ctrlKey: false,
    altKey: false,
    shiftKey: false,
    metaKey: false,
    bubbles: true,
    cancelable: true
}

您可以像这样使用它:

simulate(document.getElementById("btn"), "click");

请注意,作为第三个参数,您可以传入’options’。您未指定的选项取自defaultOptions(请参见脚本底部)。因此,例如,如果您想指定鼠标坐标,则可以执行以下操作:

simulate(document.getElementById("btn"), "click", { pointerX: 123, pointerY: 321 })

您可以使用类似的方法来覆盖其他默认选项。



 类似资料:
  • 问题内容: 我正在尝试模拟鼠标在窗口上的单击。我目前已经成功完成了以下操作(我正在使用Python,但是它应该适用于一般的win32): 这很好。但是,如果在我手动移动鼠标时发生单击,则光标位置会被抛出。有什么方法可以将点击直接发送到给定的坐标而无需将鼠标移动到那里?我尝试了以下类似的方法,但运气并不好: 问题答案: 尝试WindowFromPoint()函数:

  • 本文向大家介绍javascript触发模拟鼠标点击事件,包括了javascript触发模拟鼠标点击事件的使用技巧和注意事项,需要的朋友参考一下 事件触发器就是用来触发某个元素下的某个事件,IE下fireEvent方法,高级浏览器(chrome,firefox等)有dispatchEvent方法。 一般我们在元素上绑定事件后,是靠用户在这些元素上的鼠标行为来捕获或者触发事件的,或者自带的浏览器行为事

  • antd 的 popover,鼠标hover A 元素之后, 会出来B元素。新增到body标签里。 如何使用js触发鼠标hoverA元素的这个事件。

  • 问题内容: 我只是想知道如何使用JavaScript模拟元素的点击。 目前我有: 但这不起作用:( 有任何想法吗? 问题答案: 这是我煮的 这很简单,但是有效: 用法:

  • 我是硒的新手,我面临着简单任务的问题。 我试图将鼠标移动到页面中的特定区域(x,y坐标),然后单击,但没有成功。我确实阅读了文档,因为chromewebdriver,我使用了。 这是我的代码: 另一个问题。我知道有第四个参数起源,但是,我不知道我是否正确导入了它。 我也不知道如何触发点击事件,因为我没有选择任何元素。我想点击鼠标指针的最后位置。

  • 问题内容: 我一直在尝试寻找在Chrome中进行仿真的代码,但是即使触发了“ mouseover”侦听器,也从未设置CSS“ hover”声明! 我也尝试过: 但是似乎没有什么可以将元素更改为其声明中声明的内容。 这可能吗? 问题答案: 由于用户交互或作为DOM更改的直接结果而由用户代理生成的事件,由用户代理信任,其特权不提供给脚本通过DocumentEvent.createEvent生成的事件。