How to simulate a mouse click using JavaScript?

后端 未结 7 1250
无人及你
无人及你 2020-11-22 00:57

I know about the document.form.button.click() method. However, I\'d like to know how to simulate the onclick event.

I found this code somew

7条回答
  •  醉梦人生
    2020-11-22 01:34

    Here's a pure JavaScript function which will simulate a click (or any mouse event) on a target element:

    function simulatedClick(target, options) {
    
      var event = target.ownerDocument.createEvent('MouseEvents'),
          options = options || {},
          opts = { // These are the default values, set up for un-modified left clicks
            type: 'click',
            canBubble: true,
            cancelable: true,
            view: target.ownerDocument.defaultView,
            detail: 1,
            screenX: 0, //The coordinates within the entire page
            screenY: 0,
            clientX: 0, //The coordinates within the viewport
            clientY: 0,
            ctrlKey: false,
            altKey: false,
            shiftKey: false,
            metaKey: false, //I *think* 'meta' is 'Cmd/Apple' on Mac, and 'Windows key' on Win. Not sure, though!
            button: 0, //0 = left, 1 = middle, 2 = right
            relatedTarget: null,
          };
    
      //Merge the options with the defaults
      for (var key in options) {
        if (options.hasOwnProperty(key)) {
          opts[key] = options[key];
        }
      }
    
      //Pass in the options
      event.initMouseEvent(
          opts.type,
          opts.canBubble,
          opts.cancelable,
          opts.view,
          opts.detail,
          opts.screenX,
          opts.screenY,
          opts.clientX,
          opts.clientY,
          opts.ctrlKey,
          opts.altKey,
          opts.shiftKey,
          opts.metaKey,
          opts.button,
          opts.relatedTarget
      );
    
      //Fire the event
      target.dispatchEvent(event);
    }
    

    Here's a working example: http://www.spookandpuff.com/examples/clickSimulation.html

    You can simulate a click on any element in the DOM. Something like simulatedClick(document.getElementById('yourButtonId')) would work.

    You can pass in an object into options to override the defaults (to simulate which mouse button you want, whether Shift/Alt/Ctrl are held, etc. The options it accepts are based on the MouseEvents API.

    I've tested in Firefox, Safari and Chrome. Internet Explorer might need special treatment, I'm not sure.

提交回复
热议问题