web-dev-qa-db-ja.com

IE11でdispatchEventが機能しない

次のコードを使用してフォームに送信しています。

element.dispatchEvent(new Event("submit"));

インスペクターがエラーを返します:オブジェクトはこのアクションをサポートしていません

これはChromeで機能します。

このコマンドの目的は、クリックされたときに部門がフォームの送信イベントを呼び出すようにすることです。

Jqueryはオプションではありません

50
user4014674

これは、将来の変更を考慮してIE11およびその他のブラウザーで動作させるための最良の方法です。

var event;
if(typeof(Event) === 'function') {
    event = new Event('submit');
}else{
    event = document.createEvent('Event');
    event.initEvent('submit', true, true);
}

$el.dispatchEvent(event);
66
Kohei Mikami

私はちょうど同じ問題を抱えていましたが、以下はIE11で動作するようです:

var event = document.createEvent("Event");
event.initEvent("submit", false, true); 
// args: string type, boolean bubbles, boolean cancelable
element.dispatchEvent(event);
41
Taimo Kolsar

これを修正するには、ポリフィルを使用するのが最善です。 (カスタムイベントポリフィル)

# using yarn 
$ yarn add custom-event-polyfill

# using npm 
$ npm install --save custom-event-polyfill

それをあなたのjavascriptに含める/必要とします

import 'custom-event-polyfill';

https://www.npmjs.com/package/custom-event-polyfill

4
Sanath

さまざまなアプローチの断片を組み立てて、これを機能させました:

var customEvent = document.createEvent('HTMLEvents');
customEvent.initEvent('myCustomEvent', true, true);
document.dispatchEvent(customEvent);

正直に言うと、これは私にはあまり意味がありません。ドキュメント上にイベントを作成し(HTMLEventsという名前が必要と思われます)、イベントを別の名前で初期化します。誰かがこれをよりよく説明できる場合は、答えに組み込むことができるように、下にコメントを追加してください。

いずれにせよ、標準イベントリスナーを使用して、IE11(および最新のブラウザー)でこのカスタムイベントをリッスンできます。

document.addEventListener('myCustomEvent', function(){
  console.log('Event received.');
});
1
Mike Wheaton