Comment puis-je déclencher un clic JavaScript

j'ai un lien hypertexte dans ma page. J'essaie d'automatiser un certain nombre de clics sur l'hyperlien à des fins de test. Y a-t-il un moyen de simuler 50 clics sur l'hyperlien en utilisant JavaScript?

<a href="#" target="_blank" onclick="javascript:Test("Test");">MSDN</a>

je cherche onclick event trigger à partir du JavaScript.

140
demandé sur DVK 2010-03-04 21:02:58

8 réponses

effectuer un clic simple sur un élément HTML: simplement faire element.click() . la plupart des principaux navigateurs prennent en charge ce .


pour répéter le clic plus d'une fois: Ajouter un ID à l'élément pour le sélectionner de manière unique:

<a href="#" target="_blank" id="my-link" onclick="javascript:Test('Test');">Google Chrome</a>

et appelez la méthode .click() dans votre code JavaScript via une boucle:

var link = document.getElementById('my-link');
for(var i = 0; i < 50; i++)
   link.click();
198
répondu instanceof me 2018-06-30 13:51:09

voici ce que j'utilise: http://jsfiddle.net/mendesjuan/rHMCy/4 /

mis à jour pour fonctionner avec IE9+

/**
 * Fire an event handler to the specified node. Event handlers can detect that the event was fired programatically
 * by testing for a 'synthetic=true' property on the event object
 * @param {HTMLNode} node The node to fire the event handler on.
 * @param {String} eventName The name of the event without the "on" (e.g., "focus")
 */
function fireEvent(node, eventName) {
    // Make sure we use the ownerDocument from the provided node to avoid cross-window problems
    var doc;
    if (node.ownerDocument) {
        doc = node.ownerDocument;
    } else if (node.nodeType == 9){
        // the node may be the document itself, nodeType 9 = DOCUMENT_NODE
        doc = node;
    } else {
        throw new Error("Invalid node passed to fireEvent: " + node.id);
    }

     if (node.dispatchEvent) {
        // Gecko-style approach (now the standard) takes more work
        var eventClass = "";

        // Different events have different event classes.
        // If this switch statement can't map an eventName to an eventClass,
        // the event firing is going to fail.
        switch (eventName) {
            case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.
            case "mousedown":
            case "mouseup":
                eventClass = "MouseEvents";
                break;

            case "focus":
            case "change":
            case "blur":
            case "select":
                eventClass = "HTMLEvents";
                break;

            default:
                throw "fireEvent: Couldn't find an event class for event '" + eventName + "'.";
                break;
        }
        var event = doc.createEvent(eventClass);
        event.initEvent(eventName, true, true); // All events created as bubbling and cancelable.

        event.synthetic = true; // allow detection of synthetic events
        // The second parameter says go ahead with the default action
        node.dispatchEvent(event, true);
    } else  if (node.fireEvent) {
        // IE-old school style, you can drop this if you don't need to support IE8 and lower
        var event = doc.createEventObject();
        event.synthetic = true; // allow detection of synthetic events
        node.fireEvent("on" + eventName, event);
    }
};

notez qu'appeler fireEvent(inputField, 'change'); ne signifie pas qu'il va changer le champ d'entrée. Le cas d'utilisation typique pour lancer un événement de changement est lorsque vous définissez un champ de façon programmatique et que vous voulez que les gestionnaires d'événements soient appelés car appeler input.value="Something" ne déclenchera pas un événement de changement.

76
répondu Juan Mendes 2017-05-24 12:28:42

Ce

 l.onclick();

does appelle exactement la fonction onclick de l , c'est-à-dire si vous avez défini une fonction avec l.onclick = myFunction; . Si vous n'avez pas mis l.onclick , ça ne fait rien. En revanche,

 l.click();

simule un clic et déclenche tous les gestionnaires d'événements, qu'ils soient ajoutés avec l.addEventHandler('click', myFunction); , en HTML, ou de toute autre manière.

33
répondu 黄雨伞 2017-01-10 13:57:31

j'ai honte qu'il y ait tant d'applicabilité partielle incorrecte ou non divulguée.

la façon la plus facile de faire ceci est de passer par Chrome ou Opera (mes exemples utiliseront Chrome) en utilisant la Console. Entrer le code suivant dans la console (généralement en 1 ligne):

var l = document.getElementById('testLink');
for(var i=0; i<5; i++){
  l.click();
}

cela générera le résultat requis

19
répondu htmldrum 2012-07-17 17:34:21

.click() ne fonctionne pas avec Android (regardez mozilla docs , à la section mobile). Vous pouvez déclencher l'événement de clic avec cette méthode:

function fireClick(node){
    if (document.createEvent) {
        var evt = document.createEvent('MouseEvents');
        evt.initEvent('click', true, false);
        node.dispatchEvent(evt);    
    } else if (document.createEventObject) {
        node.fireEvent('onclick') ; 
    } else if (typeof node.onclick == 'function') {
        node.onclick(); 
    }
}

à Partir de ce post

9
répondu Manolo 2016-06-28 10:57:35

utiliser un cadre d'essai

Cela pourrait être utile - http://seleniumhq.org/ - le Sélénium est une application web tests automatisés système.

vous pouvez créer des tests en utilisant le plugin Firefox Selenium IDE

mise à feu manuelle d'événements

manuellement déclencher des événements de la bonne façon, vous aurez besoin de utilisez différentes méthodes pour différents navigateurs-soit el.dispatchEvent ou el.fireEventel sera votre élément D'ancrage. Je pense que ces deux nécessitera la construction d'un objet d'Événement pour passer en.

l'alternative, pas tout à fait correcte, la voie rapide et sale serait celle-ci:

var el = document.getElementById('anchorelementid');
el.onclick(); // Not entirely correct because your event handler will be called
              // without an Event object parameter.
8
répondu Nicole 2010-03-04 18:12:27

IE9+

function triggerEvent(el, type){
    var e = document.createEvent('HTMLEvents');
    e.initEvent(type, false, true);
    el.dispatchEvent(e);
}

exemple d'utilisation:

var el = document.querySelector('input[type="text"]');
triggerEvent(el, 'mousedown');

Source: https://plainjs.com/javascript/events/trigger-an-event-11/

2
répondu Fatih Hayrioğlu 2018-03-24 13:18:32

Fair warning:

element.onclick() ne se comporte pas comme prévu. Il exécute seulement le code dans onclick="" attribute , mais ne déclenche pas le comportement par défaut.

j'ai eu le même problème avec le bouton radio ne se réglant pas à vérifié, même si onclick fonction personnalisée fonctionnait bien. Dû ajouter radio.checked = "true"; pour le définir. Probablement le même va et pour d'autres éléments (après a.onclick() il devrait y avoir aussi window.location.href = "url"; )

1
répondu Arvigeus 2014-10-02 08:30:50