In IE, posso semplicemente chiamare element.click() da JavaScript - come faccio a svolgere lo stesso compito in Firefox? Idealmente mi piacerebbe avere un JavaScript che funzionasse egualmente bene con il cross-browser, ma se necessario avrò JavaScript per-browser diverso per questo.Come faccio a cliccare a livello di programmazione su un elemento in JavaScript?
risposta
Il document.createEvent
documentation dice che "Il metodo CreateEvent è deprecato Usa event constructors invece.".
Così si dovrebbe utilizzare questo metodo invece:
var clickEvent = new MouseEvent("click", {
"view": window,
"bubbles": true,
"cancelable": false
});
e fuoco su un elemento come this:
element.dispatchEvent(clickEvent);
come illustrato here.
l'unico che ha funzionato per me sia in firefox che in chrome – deej
forse dovrebbe essere accettato come risposta dato che quello attuale è da '09 e utilizza le funzioni deprecate –
Soluzione eccellente per Chrome. Il codice per ottenere l'elemento che poi esegue 'dispatchEvent (clickEvent);' per me era: 'var element = document.getElementById (" id-tag ");' – kbpontius
element.click() è un metodo standard delineato dal numero W3C DOM specification. Mozilla's Gecko/Firefox follows the standard e consente di chiamare questo metodo solo sugli elementi INPUT.
capito, ma non è utile quando voglio simulare programmazione clic sugli elementi non INPUT. – Bruce
Stai cercando di seguire effettivamente il link o attivare l'onclick? È possibile attivare un onclick con qualcosa di simile:
var link = document.getElementById(linkId);
link.onclick.call(link);
interessante, farò un tentativo. Questo fa parte di un'imbracatura di test, quindi non sappiamo in anticipo quale elemento specifico faremo clic su, è ciò che specifica il caso di test. – Bruce
Non è necessario specificare un contesto; poiché onclick è una proprietà di "link", il contesto sarà già impostato in modo appropriato. – James
Questo non ha funzionato in Chrome. Un errore è stato generato nella console dicendo che il metodo "chiamata" non esisteva. – kbpontius
Ecco una funzione che lavora cross browser (utilizzabile per altro che gestori di scatto troppo):
function eventFire(el, etype){
if (el.fireEvent) {
el.fireEvent('on' + etype);
} else {
var evObj = document.createEvent('Events');
evObj.initEvent(etype, true, false);
el.dispatchEvent(evObj);
}
}
Ho trovato che avevo bisogno di usare 'el [etype]();' sulla linea 3 per ottenere IE per attivare l'evento nativo (stavo testando con un gestore di clic - vedi http://jsfiddle.net/Pc8qE/) –
A per far funzionare tutto questo dovevo usare un input di tipo submit per firefox e un input di tipo button per IE. –
Per Firefox link sembrano essere "speciale". L'unico modo in cui sono riuscito a farlo funzionare era utilizzare createEvent described here on MDN e chiamare la funzione initMouseEvent. Anche che non ha funzionato del tutto, ho dovuto dire manualmente il browser per aprire un link ...
var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.getElementById('link');
element.dispatchEvent(theEvent);
while (element)
{
if (element.tagName == "A" && element.href != "")
{
if (element.target == "_blank") { window.open(element.href, element.target); }
else { document.location = element.href; }
element = null;
}
else
{
element = element.parentElement;
}
}
come differisce da window.open (element.href, element.target) - al mio Firefox funziona esattamente allo stesso modo e visualizza la brutta barra gialla – iirekm
Se si imposta il terzo ultimo parametro di MouseEvent su true (che significa metaKey (CMD) è stato tenuto premuto quando si è fatto clic), questo non avrebbe aperto la scheda in una scheda di sfondo, giusto? O lo farebbe? – Magne
ho usato la funzione di KooiInc elencato sopra, ma ho dovuto usare due diversi tipi di input un 'bottone' per IE e uno "invia" per FireFox. Non sono esattamente sicuro del perché, ma funziona.
// HTML
<input type="button" id="btnEmailHidden" style="display:none" />
<input type="submit" id="btnEmailHidden2" style="display:none" />
// in JavaScript
var hiddenBtn = document.getElementById("btnEmailHidden");
if (hiddenBtn.fireEvent) {
hiddenBtn.fireEvent('onclick');
hiddenBtn[eType]();
}
else {
// dispatch for firefox + others
var evObj = document.createEvent('MouseEvent');
evObj.initEvent(eType, true, true);
var hiddenBtn2 = document.getElementById("btnEmailHidden2");
hiddenBtn2.dispatchEvent(evObj);
}
Ho ricerca e provato molti suggerimenti, ma questo è ciò che ha finito per lavorare. Se avessi avuto più tempo mi sarebbe piaciuto indagare sul perché submit funziona con FF e button con IE, ma quello sarebbe un lusso in questo momento e così via al prossimo problema.
- 1. Aggiungi un nuovo elemento a recyclerview a livello di programmazione?
- 2. Come faccio a scrollare a livello di programmazione TreeView?
- 3. Javascript - aggiungi seleziona a livello di programmazione
- 4. Come faccio a filtrare su un livello personalizzato in log4net?
- 5. Come faccio a sapere che cosa javascript viene eseguito quando faccio clic su un elemento?
- 6. Come programmare un'attività a livello di programmazione
- 7. livello di programmazione impostare un TaxonomyField su un elemento dell'elenco
- 8. Come aggiornare un browser a livello di programmazione
- 9. Ingrandire un MKMapView a livello di programmazione
- 10. , verificare a livello di programmazione
- 11. Come spostare un UIView a livello di programmazione in Swift
- 12. Come faccio a trovare a livello di programmazione il mio utilizzo dello spazio PermGen?
- 13. Come utilizzare AcroTextExtractor.exe a livello di programmazione?
- 14. Come creare un menu a livello di programmazione in Android?
- 15. crea una funzione javascript a livello di programmazione
- 16. Come faccio a impostare android: layout_columnWeight = "1" a livello di un elemento in un supporto Android v7 Gridlayout
- 17. Ionico come tornare a livello di programmazione
- 18. Come impostare windowDrawsSystemBarBackgrounds a livello di programmazione?
- 19. Come attivare "Installato" a livello di programmazione?
- 20. Come confermare a livello di programmazione un utente in Magento?
- 21. Come faccio a convertire a livello di codice un file Keynote in un PowerPoint?
- 22. Su Android, come commuti le attività a livello di programmazione?
- 23. Inviare comandi a vim a livello di programmazione
- 24. Come configurare ELMAH a livello di programmazione?
- 25. Come posso aggiungere più fonti a un tag audio HTML5, a livello di programmazione?
- 26. Fare clic su visualizzazioni a livello di programmazione in Android
- 27. Contrassegna un ordine Magento come completo a livello di programmazione
- 28. Come disabilitare SparkUI a livello di programmazione?
- 29. Come aprire selezionare a livello di programmazione
- 30. Arresto dell'animazione GIF a livello di programmazione
Questa domanda è stata anche risolta [qui] (http://stackoverflow.com/questions/906486/how-can-i-programmatically-invoke-an-onclick-event-from-a-anchor-tag-while- conservare). –
Si prega di accettare [la mia risposta] (http://stackoverflow.com/a/22469115/865175) come soluzione, come richiesto anche da più utenti. –