3

ボタン要素が横にある入力ボックスでEnterキーを押したとき(フォーム要素にない場合)のIEの動作を「機能検出」しようとしています。

入力がフォーカスされているときにEnterキーを押したときに、次のボタンでクリックイベントを発生させる人がいないため、IEの動作を言っています。

最初のawnserがIEがこのように動作する理由を説明する関連質問: IEのバグトリガーが2つのボタンのクリックをトリガーしますか?

JS-jQuery.Eventと.triggerを介してキー押下をシミュレートしようとするフィドル:http: //jsfiddle.net/DbVrn/

IEでのjs-fiddleの動作:

  • ページを開くと、入力にフォーカスが移り、Enterキーの押下をシミュレートしようとします。
  • シミュレートされたエンターキーは何もしないため、入力はフォーカスされたまま赤のままです。
  • 入力がフォーカスされているときに手動でEnterキーを押すと、ボタンがフォーカスされて緑色になります。

この機能を検出するための現在の試みで私が抱えている問題は、次のとおりです。

$("input").trigger(jQuery.Event("keypress", { which: 13 }));

実際には、入力がフォーカスされているときに手動でEnterキーを押すのと同じことはしません。

この動作のテストを可能にするために、Enterキーを正常にシミュレートするにはどうすればよいですか?または、この動作をテストする別の方法はありますか?

編集:これをjavascriptでテストする必要があり、テストはバージョン8から10までのIEで機能する必要があることをより明確に示すようにタイトルを更新しました。他の誰かがこれをテストする方法を提供できない限り、私はユーザーエージェントスニッフィングを使用してブラウザがIEであるかどうかを確認し、それに基づいてコードパスを選択します。

4

3 に答える 3

1

jQueryのtriggerメソッドを使用することも、ネイティブメソッドを使用することも、希望する方法でキーの押下をシミュレートすることはできません。実際のキーの押下とシミュレートされたキーの押下の両方をキャプチャできますが、シミュレートされたキーの押下は、実際のキーの押下によって引き起こされるイベントハンドラーのチェーン全体をトリガーしません。これは、この線をトリガーの上に置くことで簡単に示されます

$("input").keypress(function(event) { alert(event.which); });

ご覧のとおり、キャプチャはシミュレートされたキー押下と実際のキー押下の両方で正常に機能しますが、これら2つのキー押下の処理の違いは明らかに残っています。

また、keypressイベントオブジェクトで何をするかは重要ではありません。IEの実際のキー押下にあるkeyCodeを追加できますが、これによって変更されることはありません。何もしないようです。残念ながら、この問題はしばらく前からありましたが、理由を説明するドキュメントが見つかりません。

http://forums.asp.net/t/1478871.aspx/1

したがって、ブラウザ内からの方法はないようです。あなたはなしからそれをしなければならないでしょう。そのためにInternetExplorerDriverのようなものを使用することができます。

機能を検出する代わりに、どのユーザーエージェントがこの「機能」を持っているかを単に記録することをお勧めします。Microsoftは通常、後方互換性にかなり傾倒しているため、将来のバージョンで入力フィールドのEnterキーを押す動作が変わる可能性はほとんどありません。

http://code.google.com/p/selenium/wiki/InternetExplorerDriver

入力/テキストエリアフィールドを変更するキー押下のシミュレーション

TextEventメソッドを使用すると、一部のブラウザー(chromeなど)で改行を含むテキストを入力フィールドまたはtextareaフィールドに送信できますが、このフィドルで示されているように、バージョン10までのIEのどのバージョンでも機能しません。

http://jsfiddle.net/qz7kV/1/

于 2013-01-21T14:47:21.677 に答える
1

JavaScriptを介してこの動作をテストする方法はないようです。IE 8、9、および10をテストし、それらがすべてこのように動作することを確認しました。

だから今のところ、私は Javascript IE検出からのいくつかのアイデアを組み合わせるつもりです、なぜ単純な条件付きコメントを使用しませんか?および http://tanalin.com/en/articles/ie-version-js/を使用して、IEが条件付きコンパイルコメントのサポートを削除しない限り、確実に機能するIEのテストを作成します。

var ie = (/*@cc_on!@*/false && (function(){
    var div = document.createElement("div"),
        list = div.getElementsByTagName("br"),
        version = 3;
    do {
        div.innerHTML = "<!--[if gt IE " + (++version) + "]><br><![endif]-->";
    } while(list[0]);
    return (version > 4 ? version : 10);
}()));

ie変数はInternetExplorerのブラウザーのバージョンであり、false他のブラウザーでも使用されます。

于 2013-01-22T17:29:17.333 に答える
0

JavaScriptだけからバグをトリガーする確実な方法がわかりません。他にもいくつかのオプションがあります。

  1. IEをVMにインストールし、UIロボットを使用してテストを実行します。これには多大な労力がかかりますが、確実にバグが発生します。

  2. リモートテストを提供している会社があります。SSHトンネルを使用してユーザー側のサーバーにアクセスし、さまざまなバージョンのIEに対してサイトをテストできます。これは技術的に設定するのは非常に簡単ですが、会社のポリシー、FUD、および政治のために取得するのは難しいかもしれません。「多くの異なるブラウザでウェブサイトをテストする」ためのグーグル

  3. 手動で1回テストし、機能する場合は、コードが存在することを確認するだけのテストケースを作成します(つまり、JavaScriptファイルまたはページソースに特定の固定文字列が含まれていない場合に失敗するテスト)。長所:セットアップが非常に簡単、短所:簡単に壊れます

  4. 一度テストしてから慣性に依存します(つまり、他の誰もそのコードに何年も触れないということです)。

于 2013-01-21T13:31:06.580 に答える