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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Webページ中の javascript をVB...
-
ローカルのレジストリを読みたい
-
〔Excel:VBA〕マクロの実行が異...
-
csvファイルを読み込み、該当項...
-
JavaScriptで ブラウザの閉じる...
-
ASP(VBS) ←→ JavaScript の変数...
-
VBScript から JavaScript を呼...
-
列を非表示にするマクロが実行...
-
VB.NET2003 テキストボックスに...
-
一定時間ごとの実行
-
PowerPointで時計表示
-
「戻る」ボタン使用時のフォー...
-
Ajaxが動きません~『status=0』?
-
PHPとJavaとC#の違い
-
Windows Form のMSChartで、グ...
-
confirm()をはい/いいえ に切...
-
javascriptで「オブジェクトを...
-
VB.netの重複データ数カウント...
-
JavaScriptでIEのウィンドウを...
-
if(1){...}とはどういうことで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローカルのレジストリを読みたい
-
Webページ中の javascript をVB...
-
Shell.ApplicationでのIEオブ...
-
エクセル2010のvbaについて
-
イベントevt?evt.target:event....
-
フォルダ内のファイル名を取得...
-
タブブラウザで focus() を実...
-
evtとは
-
event.srcElementの動的設定
-
jQuery for内にある配列の後の...
-
画面間でのJavaScrip...
-
チェックボックスを認識・不認...
-
JavaScriptで複数のプロパティ...
-
Dateオブジェクトの大小比較の...
-
for...inのプロパティ取り出し...
-
CSSのクラスを動的に変更 classで
-
javaScriptでグローバル変数に...
-
イベントリスナに登録される fu...
-
IEでDOMインターフェースを拡張...
-
文字を移動させその位置を表示...
おすすめ情報