4

Web アプリケーションでキープレスをシミュレートしようとしています。これは組み込みシステム用ですが、Webkit 派生ブラウザーを使用しています。Chrome でコードをテストしたところ、同じエラーが発生しました。

Yahooのこの例のコード スニペットを使用しようとしましたが、dispatchEvent. 「ターゲット」は DOM ツリーの HTML 要素です。

function fireEvent(target) {
    var evt = document.createEvent("UIEvent");
    evt.initEvent("keypress", true, true);
    target.dispatchEvent(evt);
}

それは常にスローします:

「エラー: UNSPECIFIED_EVENT_TYPE_ERR: DOM イベント例外 0」

私も試してみcreateEvent("Events")ましたが、組み込みシステムとChromeの両方で、常に同じ例外になります。

4

3 に答える 3

4

OK、さらにテストを行ったところ、すべての主要なイベント パラメータが適切に初期化されると、dispatchEvent が例外を発生させることなく機能したように見えました。

次のコードは機能します。

function fireEvent(target) {
    var evt = document.createEvent("Events");
    evt.initEvent("keypress", true, true);

    evt.view = window;
    evt.altKey = false;
    evt.ctrlKey = false;
    evt.shiftKey = false;
    evt.metaKey = false;
    evt.keyCode = 0;
    evt.charCode = 'a';

    target.dispatchEvent(evt);
}
于 2010-11-02T15:57:36.970 に答える
2

キープレスはUIEvent. initUIEvent( 'type', bubbles, cancelable, windowObject, detail )ではなく使用する必要がありますinitEvent()。ただし、 を実装する Firefox のkeyEvents場合は、 と を作成する必要がKeyEventsありinitKeyEvents()ます。

于 2012-04-04T22:27:55.860 に答える
0

これは古いスレッドです。それを更新するために、別の回答を追加して、誰にとってもより意味のあるものにします。

initEvent() は非推奨です一部のブラウザーではまだサポートされていますが、使用しないでください。

このようなイベントを作成するためのより簡潔な方法があります

  function fireEvent(target) {
   var event = new Event('build');

   // Listen for the event.
   target.addEventListener('build', function (e) { ... }, false);

   // Dispatch the event.
    target.dispatchEvent(event);
}

イベント オブジェクトにさらにデータを追加するために、CustomEvent インターフェイスが存在し、detail プロパティを使用してカスタム データを渡すことができます。たとえば、イベントは次のように作成できます。

var event = new CustomEvent('build', { 'detail': target.dataset.time });

リファレンス:イベントの作成とトリガー

于 2017-03-02T07:54:07.167 に答える