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で質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Webページ中の javascript をVB...
-
Shell.ApplicationでのIEオブ...
-
フォルダ内のファイル名を取得...
-
JSPの処理の途中で、JavaScript...
-
VB.NET2003 テキストボックスに...
-
正整数の半角数字かどうか判定する
-
gas 全角数字を半角数字に変換
-
VBAによる第3、4水準文字の判定...
-
jsでルートディレクトリより上...
-
C#でTextBoxに数値のみ入力可能...
-
VBAの[cellsメソッドは失敗しま...
-
PHPとjavascriptで共通なエンコ...
-
VB.NETからWEBブラウザの操作に...
-
計算結果が毎回違う。
-
デザイン時のVisible=Falseは実...
-
PowerPointで時計表示
-
Excel VBA カタカナ セル判定...
-
1つのVBAコードをすべてのコア...
-
既存のwebサイトで、ローカルの...
-
javascriptで「オブジェクトを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローカルのレジストリを読みたい
-
Webページ中の javascript をVB...
-
画面間でのJavaScrip...
-
javaScriptでグローバル変数に...
-
フォルダ内のファイル名を取得...
-
CSSのクラスを動的に変更 classで
-
イベントevt?evt.target:event....
-
タブブラウザで focus() を実...
-
event.srcElementの動的設定
-
エクセル2010のvbaについて
-
jquery か javascript で json ...
-
【javascript】プロパティ?オ...
-
JavaScriptの仕様(ECMA-262以外)
-
PHPで定義した変数を引数として...
-
javascriptでオブジェクトのメ...
-
ASP.NETでURLにマッピングされ...
-
JavaScript 日数計算の関数で演...
-
VBAの引数の指定 カッコとイコ...
-
JavaScriptでオブジェクトを識...
-
jQueryで、listの要素数を取得...
おすすめ情報