2010-07-18 6 views

Antwort

109

Sie können eine klicken Sie auf Ereignis, obwohl dies nicht das gleiche wie ein echter Klick ist. Zum Beispiel kann es nicht verwendet werden, um ein domainübergreifendes iFrame-Dokument zu glauben, dass es angeklickt wurde.

Alle modernen Browser unterstützen document.elementFromPoint und HTMLElement.prototype.click(), seit mindestens IE 6, Firefox 5, jede Version von Chrome und wahrscheinlich jede Version von Safari, die Sie wahrscheinlich kümmern werden. Es wird sogar Links folgen und Senden von Formularen:

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

Passen Sie die verwenden:

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

Das ist unglaublich !! Genau das, was ich gesucht habe !!! = O – RadiantHex

+0

funktioniert es mit IE und WebKit? – RadiantHex

+1

@RadiantHex: Ja, tatsächlich war IE der Erste, der es implementierte und es geht weit zurück zu IE6. Chrome, Firefox und Safari 5-Implementierungen sind in Ordnung, aber Safari 4 und Opera sind nicht korrekt (obwohl praktikabel). Siehe http://www.quirksmode.org/dom/w3c_cssom.html#documentview. –

1

Aus Sicherheitsgründen können Sie den Mauszeiger nicht mit Javascript bewegen oder einen Mausklick simulieren.

Was möchten Sie erreichen?

+0

@Aicule: Danke, dass Sie mich wissen lassen! Ich füge ein paar Informationen zur Frage hinzu. Ich experimentiere nur, nichts wirklich produktiv =) – RadiantHex

+1

In Chrome und Safari können Sie einen Klick auf eine bestimmte x, y-Position auslösen. So funktioniert [diese Demo] (http://thdoan.github.io/magnify/demo-map.html). Firefox ist der einzige Browser, in dem es fehlschlägt, also ist es vielleicht eine Firefox-spezifische Sicherheitsrichtlinie. – 10basetom

+0

Wahrheit liegt in der Antwort unten, createEvent() '+' initMouseEvent() ' – Valer

45

Ja, können Sie einen Mausklick durch ein Ereignis erstellen und Dispatching simulieren click Methode auf einem Element - es ist weit verbreitet, aber nicht Standard und wird in zB fehlschlagen PhantomJS. Ich nehme an, dass jQuerys Implementierung von .click() das Richtige tut, aber nicht bestätigt hat.

+0

rettete mich aus einem Durcheinander. Meine anfängliche Methode scheiterte, aber diese kam mir zu Hilfe, danke. – iChux

+3

plus1 für die Verwendung von jQuery. Im Gegensatz zu der angenommenen Antwort beantwortet dieser die Frage. – tomekwi

+1

Dies ist viel, viel mächtiger als jQuery '' .click() ' –

18

Dies ist nur torazaburo's answer, aktualisiert, um ein MouseEvent-Objekt zu verwenden.

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); 
} 
Verwandte Themen