2010-07-18 9 views

Respuesta

109

Puede enviar un haga clic en evento, aunque esto no es lo mismo que un clic real. Por ejemplo, no se puede usar para engañar a un documento de iframe de dominios cruzados y pensar que se hizo clic.

Todos los navegadores modernos admiten document.elementFromPoint y HTMLElement.prototype.click(), ya que al menos IE 6, Firefox 5, cualquier versión de Chrome y probablemente cualquier versión de Safari es probable que le interese. Incluso seguirá los enlaces y enviar formularios:

document.elementFromPoint(x, y).click(); 

https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click

+5

¡Eso es increíble! ¡¡¡Exactamente lo que estaba buscando!!! = O – RadiantHex

+0

¿funciona con IE y WebKit? – RadiantHex

+1

@RadiantHex: sí, de hecho IE fue el primero en implementarlo y se remonta a IE6. Las implementaciones de Chrome, Firefox y Safari 5 están bien, pero las de Safari 4 y Opera son incorrectas (aunque viables). Ver http://www.quirksmode.org/dom/w3c_cssom.html#documentview. –

1

Por razones de seguridad, no se puede mover el puntero del ratón con javascript, ni simular un clic en él.

Qué es lo que usted está tratando de lograr?

+0

@Aicule: ¡gracias por avisarme! Añadiré un poco de información a la pregunta. Solo estoy experimentando, nada realmente productivo =) – RadiantHex

+1

En Chrome y Safari, puede disparar un clic en una posición x, y específica. Así es como funciona [esta demostración] (http://thdoan.github.io/magnify/demo-map.html). Firefox es el único navegador donde falla, por lo que tal vez se trate de una política de seguridad específica de Firefox. – 10basetom

+0

La verdad se encuentra en la respuesta a continuación, 'createEvent()' + 'initMouseEvent()' – Valer

45

Sí, se puede simular un clic del ratón mediante la creación de un evento y despacharlo:

function click(x,y){ 
    var ev = document.createEvent("MouseEvent"); 
    var el = document.elementFromPoint(x,y); 
    ev.initMouseEvent(
     "click", 
     true /* bubble */, true /* cancelable */, 
     window, null, 
     x, y, 0, 0, /* coordinates */ 
     false, false, false, false, /* modifier keys */ 
     0 /*left*/, null 
    ); 
    el.dispatchEvent(ev); 
} 

Cuidado con el uso de la click método en un elemento: está ampliamente implementado pero no es estándar y fallará, por ejemplo PhantomJS. Asumo que la implementación de jQuery de .click() hace lo correcto pero no se ha confirmado.

+0

Me salvó de un desastre. Mi método inicial falló pero este vino al rescate, gracias. – iChux

+3

plus1 por no usar jQuery. A diferencia de la respuesta aceptada, esta pregunta responde la pregunta. – tomekwi

+1

Esto es mucho, mucho más poderoso que jQuery '$ .click()' –

18

esto es sólo torazaburo's answer, actualizado para utilizar un objeto MouseEvent.

function click(x, y) 
{ 
    var ev = new MouseEvent('click', { 
     'view': window, 
     'bubbles': true, 
     'cancelable': true, 
     'screenX': x, 
     'screenY': y 
    }); 

    var el = document.elementFromPoint(x, y); 

    el.dispatchEvent(ev); 
} 
Cuestiones relacionadas