devdev / in the loop

Simulare click in vanilla JavaScript con MouseEvent

Come possiamo scrivere l’equivalente del metodo .click() di jQuery, simulando di fatto un click?

Cercando in rete si scopre facilmente che esiste già un metodo HTMLElement.click() che simula appunto l’azione dell’utente. Il brutto è che, però, potrebbe comportarsi non esattamente come ci aspettiamo, almeno non con la semplicità offerta da jQuery. In ogni caso, il metodo click()  non può essere triggato su un elemento <a> , che immagino sia spesso quello che vorremmo fare.

Vediamo quindi come utilizzare allora le API MouseEvent di JavaScript per costruire un metodo alternativo funzionante:

var simulateClick = function (elem) {
    // Opzioni
    var evt = new MouseEvent('click', {
        bubbles: true,
        cancelable: true,
        view: window
    });
    // Se cancellato non triggiamo l'evento
    var canceled = !elem.dispatchEvent(evt);
};

Per utilizzarlo, chiamiamo la funzione simulateClick  passandogli l’elemento sul quale simulare il click:

var elemento = document.querySelector('a');
simulateClick(elemento);

Ps. funziona con Internet Explorer dalla versione 9 in poi.

Questo articolo ti è stato utile?
Javascript – LETTURA 4 MINUTI Alternativa a jQuery .eq() in Javascript
Una delle funzioni di traversing più utili di jQuery è sicuramente .eq() . Ci permette di accedere ad un elemento di…
Javascript – LETTURA 4 MINUTI Come conoscere la posizione di un elemento con jQuery index o in vanilla Javascript
Il motto di jQuery è “Write less, do more”, anche se gli ultimi anni stiamo vedendo uno shifting di molte…
Javascript – LETTURA 6 MINUTI Utilizzare i parametri GET in Javascript con URLSearchParams
I parametri URL, che tutti conosciamo come parametri GET o query) vengono utilizzati per passare informazioni alla pagina che stiamo…
Javascript – LETTURA 4 MINUTI Aggiungere una regola CSS con Javascript
Aggiungere una regola CSS in modo dinamico con Javascript può esserci utile in vari casi: uno riguarda sicuramente le performance,…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.