2013-08-23 12 views
9

Per il test dell'unità JS, devo verificare che un doppio clic si comporti come previsto. Il problema è che l'evento è stato registrato tramite element.addEventListener. E per qualche ragione, in questo caso, element.ondblclick() non funziona. HTML:Come attivare a livello di codice un evento dblclick definito con addEventListener?

<input type="image" src="pic.jpg" id="aa"/> 

Javasript:

 
document.getElementById('aa').addEventListener("dblclick", function(){alert('aa')}); 
document.getElementById('aa').ondblclick(); 

Fiddle: http://jsfiddle.net/prZKy/

Se si fa doppio clic sull'immagine, funziona, ma l'ondblclick() in javascript non funziona.

Qualcuno ha un'idea su come farlo?

+0

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.dispatchEvent – karaxuna

+1

interessante, questo funziona - http://jsfiddle.net/MNx9K/ perché? – Vandesh

risposta

12

È possibile utilizzare per attivare dispatchEvent programatically eventi:

var event = new MouseEvent('dblclick', { 
    'view': window, 
    'bubbles': true, 
    'cancelable': true 
    }); 
document.getElementById('aa').dispatchEvent(event); 

vedere la sezione "Attivazione built-in eventi" a MDN.

Here è un violino del codice in azione.

+0

Non funziona su IE9 per me. – Nenotlep

+3

@Nenotlep Perché IE9 succhia il culo e non riconosce l'evento 'dblclick'. Devi hackerarti un gestore di click che imposta un timeout, fingendo un doppio clic. [Yuck] (http://stackoverflow.com/questions/17408714/double-click-using-ie). – CodingIntrigue

0
var doubleClickEvent = document.createEvent('MouseEvents'); 
doubleClickEvent.initEvent('dblclick', true, true); 
e.currentTarget.dispatchEvent(doubleClickEvent); // inside method 

Questo dovrebbe funzionare.

Problemi correlati