Come posso triggersre un clic evento JavaScript?

Ho un collegamento ipertestuale nella mia pagina. Sto provando ad automatizzare un certo numero di clic sul collegamento ipertestuale per scopi di test. C'è qualche modo per simulare 50 clic sul collegamento ipertestuale utilizzando JavaScript?

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

Sto cercando un trigger evento onClick dal JavaScript.

Aggiungere un ID al tuo collegamento

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

e lo chiami nel tuo codice javascript:

 var l = document.getElementById('my-link'); for(var i=0; i<50; i++) l.click(); 

Ecco cosa uso: http://jsfiddle.net/mendesjuan/rHMCy/4/

Aggiornato per funzionare con 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" (eg, "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 classs. // 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); } }; 

Si noti che call fireEvent(inputField, 'change'); non significa che cambierà effettivamente il field di input. Il caso tipico di utilizzo per sparare un evento di modifica è quando si imposta un field in modo programmato e si desidera che i gestori di events si chiamano dal momento che l' input.value="Something" non innesca un evento di modifica.

Che cosa

  l.onclick(); 

fa esattamente call la function onclick di l , cioè, se hai impostato uno con l.onclick = myFunction; . Se non hai impostato l.onclick , non fa nulla. In contrasto,

  l.click(); 

simula un clic e spara tutti i gestori di events, sia aggiunti con l.addEventHandler('click', myFunction); , in HTML, o in qualsiasi altro modo.

Mi vergogno veramente che ci siano tante inefficienze parziali o non divulgate.

Il modo più semplice per farlo è attraverso Chrome o Opera (i miei esempi utilizzeranno Chrome) utilizzando la Console. Inserire il codice riportto di seguito nella console (generalmente in 1 row):

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

Questo genera il risultato richiesto

Utilizzare un framework di test

Questo potrebbe essere utile – http://seleniumhq.org/ – Selenium è un sistema di test automatizzato di applicazioni web.

È ansible creare test utilizzando il plugin Firefox Selenium IDE

Sparare manualmente gli events

Per sparare manualmente gli events il ​​modo corretto è necessario utilizzare methods diversi per diversi browser – el.dispatchEvent o el.fireEvent where el sarà l'elemento di ancoraggio. Credo che entrambe queste cose richiederanno la costruzione di un object Event per passare.

Il modo alternativo, non completamente corretto, veloce e sporco sarebbe questo:

 var el = document.getElementById('anchorelementid'); el.onclick(); // Not entirely correct because your event handler will be called // without an Event object parameter. 

.click() non funziona con Android (si veda mozilla docs , alla sezione mobile). Puoi triggersre l'evento clic con questo metodo:

 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(); } } 

Da questo post

Giusto avvertimento:

element.onclick() non si comport come previsto. Esegue solo il codice onclick="" attribute , ma non innesca il comportmento predefinito.

Avevo un problema simile con il button di opzione non impostato per controllare, anche se la function personalizzata onclick stava funzionando bene. Doveva aggiungere radio.checked = "true"; per impostarla. Probabilmente lo stesso va e per altri elementi (dopo a.onclick() ci dovrebbe essere anche window.location.href = "url"; )

Utilizza jQuery

 $(node).trigger("click"); 
  angular.element(document.querySelector('selector'))[0].click() 

per me va bene!