- ベストアンサー
JavaScriptでevent.srcElementの動的設定方法は?
- JavaScriptのfunction内で、event.srcElementの値を上書きする方法について教えてください。
- event.srcElementを動的に設定する場合、普通に「event.srcElement = document.getElementById('a');」と書くとスクリプトエラーが発生します。
- IE6(SP2)で単体テストを行っている際に、event.srcElementを動的に設定し、各種パターンの検証を行いたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
document.getElementById("a").fireEvent("onclick") で #a を srcElement とする "click" が発火します。 また、elt.onclick のようなレガシープロパティではなく attachEvent() または HTML の onclick 属性を使っており、かつイベントハンドラがイベントオブジェクトを第一引数に受け取るようきちんと定義しているなら、 handleEvent({ type: 'click', srcElement: null }) のような疑似イベントオブジェクトを渡すだけで、テストとしては十分機能するのではないでしょうか。仮に外からイベントハンドラが見えないとしても、JScript には条件コンパイルがあるので、 //@cc_on@set@test=1 (function () { function handleEvent (e) { var se = e.srcElement; } //@if(@test)window.handleEvent = handleEvent;@end }) (); function testHoge() { handleEvent({ srcElement: undefined }); } のようにテスト時だけ API を生やせば良い。テストが終わって @test=0 にすれば、その行は完全にコメントとして無視されます。これのおかげで、IE は非常にテスト・トレースしやすい環境のはずです。
その他の回答 (1)
- think49
- ベストアンサー率59% (285/482)
event.srcElement は読み込み専用です。別の値を書き込むことは出来ません。 http://msdn.microsoft.com/ja-jp/library/cc410014.aspx
お礼
「fireEvent」で解決しました。 引数なしのイベントハンドラであるため後者の方法は使えませんが、条件コンパイルについては知らなかったので、勉強になります。 ちょうどJsUnitによるテスト時のみ有効にしたいfunction等があったので、活用できそうなら活用してみます。 ありがとうございました。