How to simulate a click with JavaScript?

前端 未结 8 2002
说谎
说谎 2020-11-22 01:49

I\'m just wondering how I can use JavaScript to simulate a click on an element.

Currently I have:



        
相关标签:
8条回答
  • 2020-11-22 01:58
    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.
    }
    

    Reference

    • https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
    • https://codepen.io/felquis/pen/damDA
    0 讨论(0)
  • 2020-11-22 02:00

    Have you considered using jQuery to avoid all the browser detection? With jQuery, it would be as simple as:

    $("#mytest1").click();
    
    0 讨论(0)
  • 2020-11-22 02:00

    You could save yourself a bunch of space by using jQuery. You only need to use:

    $('#myElement').trigger("click")
    
    0 讨论(0)
  • 2020-11-22 02:04

    What about something simple like:

    document.getElementById('elementID').click();
    

    Supported even by IE.

    0 讨论(0)
  • 2020-11-22 02:04

    The top answer is the best! However, it was not triggering mouse events for me in Firefox when etype = 'click'.

    So, I changed the document.createEvent to 'MouseEvents' and that fixed the problem. The extra code is to test whether or not another bit of code was interfering with the event, and if it was cancelled I would log that to console.

    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.
        } 
      }
    }
    
    0 讨论(0)
  • 2020-11-22 02:12

    This isn't very well documented, but we can trigger any kinds of events very simply.

    This example will trigger 50 double click on the button:

    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>

    The Event interface represents an event which takes place in the DOM.

    An event can be triggered by the user action e.g. clicking the mouse button or tapping keyboard, or generated by APIs to represent the progress of an asynchronous task. It can also be triggered programmatically, such as by calling the HTMLElement.click() method of an element, or by defining the event, then sending it to a specified target using EventTarget.dispatchEvent().

    https://developer.mozilla.org/en-US/docs/Web/API/Event

    https://developer.mozilla.org/en-US/docs/Web/API/Event/Event

    0 讨论(0)
提交回复
热议问题