コアポイント
CustomEvent
メソッドを使用して、特定の要素でこのイベントを発送できます。 dispatchEvent
<label for="msg">你的留言</label><input type="text" id="msg"><button type="submit" form="msgbox">发送</button> <form id="msgbox"></form>
ツイートとしてメッセージを送信したり、サーバーに保存したり、他のアクションを実行したりする場合はどうなりますか?既存のイベント委任方法には、2つのオプションがあります。
document.getElementById("msgbox").addEventListener("submit", function(e) { e.preventDefault(); var msg = e.currentTarget.getElementById("msg").value.trim(); if (msg) { alert(msg); } }, false);
既存のハンドラーにさらにコードを追加します。 機能が追加、変更、または削除されるたびに、ハンドラー機能を更新およびテストする必要があるため、これは十分に柔軟ではありません。投稿されたメッセージには数十の用途があり、それらをすべて同じコードブロックに適用しようとしています。
目的ごとにイベントハンドラーを増やします。 これにより、よりエレガントなコードが生成されますが、メンテナンスの問題が発生します。まず、各関数は、メッセージを抽出および検証するために同様の操作を実行する必要があります。フォームを変更する必要がある場合はどうなりますか? IDを変更するだけで、各サブスクライバーのイベント処理コードを変更する必要があります。
有効なメッセージを投稿するときに、カスタム「NewMessage」イベントを単にトリガーできればいいのに、いいことではないでしょうか?特定のフォームノードを参照する代わりに、
またはdetail
:イベントに関するカスタム情報を提供する子オブジェクト。この例では、メッセージと時間を追加しました。 bubbles
:もしtrue
の場合、イベントはイベントをトリガーした要素の祖先に泡立ちます。 cancelable
:true
の場合は、イベントオブジェクトのstopPropagation()
メソッドを使用してイベントをキャンセルできます。 次に、特定の要素でこのイベントを派遣する必要があります。
<label for="msg">你的留言</label><input type="text" id="msg"><button type="submit" form="msgbox">发送</button> <form id="msgbox"></form>
document.getElementById("msgbox").addEventListener("submit", function(e) { e.preventDefault(); var msg = e.currentTarget.getElementById("msg").value.trim(); if (msg) { alert(msg); } }, false);
この例は、テクニックを示しています。カスタムイベントデモページを表示します。標準のイベントハンドラーは、上記のHTMLフォームの提出を探します。この関数は現在のメッセージを取得し、それが有効であると仮定すると、新しい「NewMessage」イベントが派遣されます。
ハンドラーは、「NewMessage」イベントを購読できるようになりました。イベントは、有効なメッセージが存在する場合にのみトリガーされ、
var event = new CustomEvent( "newMessage", { detail: { message: "Hello World!", time: new Date(), }, bubbles: true, cancelable: true } );
に設定されているため、イベントはフォームまたはルートbubbles
などの祖先に適用できます。 >
true
メッセージ自体は、イベントオブジェクトのdocument
属性から抽出できます。
document.getElementById("msgbox").dispatchEvent(event);
ブラウザー互換性detail.message執筆時点で、Chrome、Firefox、およびOperaサポート
オブジェクト。 Safariの夜間バージョンで利用できるため、そのブラウザですぐに利用できるようになります。このオブジェクトは、IE9以下ではサポートされていません。幸いなことに、いくつかのJavaScriptライブラリはカスタムイベントデリゲートをサポートしているため、SitePointをご期待ください。(擬似オリジナルの目標と一致せず、長すぎるため、FAQの部分はここで省略されています。)
以上がJavaScriptでカスタムイベントを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。