2013-08-23 9 views
9

Dla testu jednostki JS, muszę sprawdzić, czy dwukrotne kliknięcie zachowuje się zgodnie z oczekiwaniami. Problem polega na tym, że zdarzenie zostało zarejestrowane przez element.addEventListener. I z jakiegoś powodu, w tym przypadku element.ondblclick() nie działa. HTML:Jak programowo uruchomić zdarzenie dblclick zdefiniowane przez addEventListener?

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

obsługi JavaScript:

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

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

Dwukrotne kliknięcie na obrazie, to działa, ale ondblclick() w javascript nie działa.

Ktoś ma pomysł, jak to zrobić?

+0

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

+1

ciekawe, to działa - http://jsfiddle.net/MNx9K/ dlaczego? – Vandesh

Odpowiedz

12

Można użyć dispatchEvent programowo wyzwalać zdarzenia:

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

Patrz „Wyzwolenie wbudowany w imprezach” na MDN.

Here to skrzypce kodu w akcji.

+0

Nie działa na IE9 dla mnie. – Nenotlep

+3

@Nenotlep Ponieważ IE9 zasysa tyłek i nie rozpoznaje zdarzenia 'dblclick'. Musisz zhackować się handler'em, który ustawia limit czasu, udając dwukrotne kliknięcie. [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 

to powinno działać.

Powiązane problemy