そうだったのか。ここ条件外のマルチポストは禁止なんだけどね。
じゃあ、とっとと終わりにしよう。まず、IE(および Opera)は、あらゆる要素オブジェクトが click メソッドを持つ。
// IE, Opera
var target = document.getElementsByTagName ('p');
target.click ();
だが、DOM HTML では HTMLInputElement のみ click メソッドを持つことになっている。それ以外のノードで click を発生させたい場合、DOM Events を利用して click イベントを作成し、対象ノードに通知する、という手順になる。
// Gecko, Opera, Safari
var target = document.getElementsByTagName ('p');
var event = document.createEvent ('MouseEvents');
event.initMouseEvent ('click', true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
// event.initEvent ('click', true, true); // for Safari
target.dispatchEvent (event);
# ただし、現状 Safari は MouseEvent#initMouseEvent を持っていないので、上記でコメントアウトした Event#initEvent で初期化する。Gecko、Opera もこれで動作するので、むしろこちらの方が簡単かもしれない。
# また、>>1 でも触れたが、Firefox 1.5 は EventTarget#dispatchEvent した場合に、ブラウザのデフォルトアクションが動作しないようだ(Firefox 2.0 では未確認)。
以上の手順で、Gecko、Opera、Safari では、あらゆるノード上で、あらゆるイベントを、任意のタイミングで発火させることができる。
こうなると、IE でも click だけでなく、任意のイベントを発火させたくなる。そのためには fireEvent メソッドを使う。
// IE 5.5+
var target = document.getElementsByTagName ('p');
var event = document.createEventObject ();
event.something = 'ユーザ定義プロパティ';
target.fireEvent ('onclick', event);
作成したイベントオブジェクトには、任意のユーザ定義プロパティを付けることができる。このイベントオブジェクトは、イベントハンドラ内の第一引数として受け取ることもできるし、window.event として受け取ることも可能。
# なお、発火した時点で、イベントオブジェクトの type、srcElement、cancelBubble、returnValue は自動的に上書きされることに注意。
# fireEvent の第二引数を省略しても良い。IE が適当に作成してくれる。
以上の手順で、IE でも、あらゆる要素上で、あらゆるイベントを、任意のタイミングで発火させることができる。
終わり。