1. ホーム
  2. javascript

[解決済み] 手動でonchangeイベントを発生させるにはどうすればよいですか?重複

2022-03-18 11:14:46

質問

カレンダーウィジェットで日付と時刻のテキストフィールドの値を設定しています。明らかに、カレンダーウィジェットは次のようなことをします。

document.getElementById('datetimetext').value = date_value;

私が欲しいのは
日付と時刻のテキストフィールドの値を変更すると、ページ内の他のフィールドをリセットする必要があります。私は onchange イベントリスナーを datetimetext フィールドがトリガーされないのは、おそらく onchange がトリガーされるのは、その要素がフォーカスを得たときだけであり、フォーカスを失うとその値は変更されます。

そのため、手動でこの onchange イベント(テキストフィールドの値の違いをチェックすることを引き受けるべきと思います)が発生します。

何かアイデアはありますか?

解決方法は?

いくつかの方法があります。 もし onchange リスナーは element.onchange プロパティを使用し、イベントオブジェクトやバブリング/プロパゲーションを気にしない場合、最も簡単な方法は、単にその関数を呼び出すことです。

element.onchange();

実際のイベントを完全にシミュレートするために必要であれば、html属性でイベントを設定するか、または addEventListener / attachEvent の場合、イベントを正しく発生させるために、ちょっとした特徴検出を行う必要があります。

if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    element.dispatchEvent(evt);
}
else
    element.fireEvent("onchange");