usuario - ¿Cómo simular un clic con JavaScript?
tipos de funciones en javascript (6)
Me pregunto cómo puedo usar JavaScript para simular un clic en un elemento.
Actualmente tengo:
<script type="text/javascript">
function simulateClick(control)
{
if (document.all)
{
control.click();
}
else
{
var evObj = document.createEvent(''MouseEvents'');
evObj.initMouseEvent(''click'', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
control.dispatchEvent(evObj);
}
}
</script>
<a href="http://www.google.com" id="mytest1">test 1</a><br>
<script type="text/javascript">
simulateClick(document.getElementById(''mytest1''));
</script>
Pero no está funcionando :(
¿Algunas ideas?
¿Has considerado usar jQuery para evitar toda la detección del navegador? Con jQuery, sería tan simple como:
$("#mytest1").click();
¿Qué pasa con algo simple como:
document.getElementById(''elementID'').click();
Supported incluso por IE.
Esto es lo que cociné. Es bastante simple, pero funciona:
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);
}
}
Uso:
eventFire(document.getElementById(''mytest1''), ''click'');
La mejor respuesta es la mejor! Sin embargo, no estaba activando eventos del mouse para mí en Firefox cuando etype = ''click''
.
Por lo tanto, cambié document.createEvent
a ''MouseEvents''
y eso solucionó el problema. El código adicional es para probar si otro bit de código estaba interfiriendo con el evento, y si se cancelaba, lo registraría en la consola.
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.
}
}
}
Podrías ahorrarte un montón de espacio usando jQuery. Solo necesitas usar:
$(''#myElement'').trigger("click")
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.
}