JavaScriptのfunction内で、event.srcElementの値の上書きする方法についてご存知の方がいれば教えていただけないでしょうか?
普通に「event.srcElement = document.getElementById("a");」(※1)等と書くとスクリプトエラーが発生してしまいます。
※1 例えば事前に<input type="text" id="a" value="aval" />等をBody内に定義しています。
やりたいことは、IE6(SP2)で、JsUnitという(JUnitのJavaScript版)単体テストツールを使用した、JavaScriptの単体テストを行っているのですが、テスト対象のfunction内でevent.srcElementを参照しており、event.srcElementを入力条件の1つとして有効値、無効値の各種パターン(例えば、undefined、null、inputタグElement、selectタグElement等)を検証するために値を動的に設定することです。
プロジェクトの単体テストで可能な限りJsUnitを使用する方針があるのですが、無理なら例外的にJsUnitを使用せずにテストと思っているので、困り具合はそれほど高くありません。
よろしくお願いいたします。
No.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 は非常にテスト・トレースしやすい環境のはずです。
「fireEvent」で解決しました。
引数なしのイベントハンドラであるため後者の方法は使えませんが、条件コンパイルについては知らなかったので、勉強になります。
ちょうどJsUnitによるテスト時のみ有効にしたいfunction等があったので、活用できそうなら活用してみます。
ありがとうございました。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
二次元配列の中の各行の要素を...
-
ローディングアニメーションの...
-
このプログラムに、王手をかけ...
-
二次元配列を使って順位をだす...
-
スマホ上で、左右スワイプで次...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
functionはhtmlやjsに2度使えま...
-
食材の期限を管理するためにGAS...
-
前回の質問の続き function mov...
-
前回の質問の続き function mou...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローカルのレジストリを読みたい
-
Webページ中の javascript をVB...
-
javaScriptでグローバル変数に...
-
javascript 名前空間?
-
エクセル2010のvbaについて
-
ASP.NETでURLにマッピングされ...
-
一定時間経つと画像を消す方法
-
evtとは
-
Javascriptの正規表現で変数を...
-
Shell.ApplicationでのIEオブ...
-
JavaScriptの正規表現について
-
タブブラウザで focus() を実...
-
javascriptでのリンク
-
JSの「document.getElementById...
-
javascript 親オブジェクトと子...
-
画面間でのJavaScrip...
-
JavaScriptで複数のプロパティ...
-
【javascript】プロパティ?オ...
-
文字を移動させその位置を表示...
-
「リンク」と「ハイパーリンク...
おすすめ情報