2013-08-23 14 views
9

JSユニットテストでは、ダブルクリックが期待どおりに動作することを確認する必要があります。問題は、イベントがelement.addEventListenerを介して登録されたことです。何らかの理由で、この場合、element.ondblclick()は機能しません。 HTML:addEventListenerで定義されたdblclickイベントをプログラムで起動するにはどうすればよいですか?

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

Javasript:

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

フィドル:http://jsfiddle.net/prZKy/

あなたがイメージをダブルクリックして、それが動作する場合が、JavaScriptにおけるれるondblclick()は動作しません。

誰でも方法を知りましたか?

+0

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

+1

興味深いことに、この作品 - http://jsfiddle.net/MNx9K/ なぜ? – Vandesh

答えて

12

あなたはプログラム的にイベントをトリガするためにdispatchEventを使用することができます。

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

MDNの「組み込みのイベントをトリガー」を参照してください。

Hereは、動作しているコードの真実です。

+0

私のためにIE9で動作しません。 – Nenotlep

+3

@Nenotlep IE9はお尻を吸っていて、 'dblclick'イベントを認識しないので。タイムアウトを設定する 'click'ハンドラを自分自身でハックする必要があります。ダブルクリックを偽ってしまいます。 [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 

これは動作するはずです。

関連する問題