4

マウス クリック イベントを作成しており、それをいくつかのノードに連続してディスパッチしようとしています。そのために、同じ MouseEvent オブジェクトを使用していますが、何らかの理由でこのアプローチは機能しません。それでも、毎回手動でイベントを作成すると、システムは機能します。この動作の理由を知っている人はいますか? timeStamp を変更しようとしましたが、まだ問題が発生します。前に述べたように問題を解決できますが、この MouseEvent と対応するディスパッチおよびハンドリング サブシステムが実際にどのように機能するかに興味があります。MDC ページで見つけた MouseEvent の仕様には、多くの情報が欠けているようです。

助けてくれたTnx!

4

3 に答える 3

6

これは実際にはセキュリティ メカニズムであり、以前にディスパッチされたイベントをディスパッチすることは許可されていません。イベントには常に追加データが関連付けられています。たとえば、イベントが信頼できるソース (JavaScript コードではなくユーザーのキーボード) からのものかどうかなどです。一部の攻撃 (変更可能なイベント オブジェクトがあったため、主に MSIE に対するもの) がこれを使用していました。信頼できるイベントをキャッチし、それを変更して、別の場所に再度ディスパッチしました (変更が常に必要であるとは限りません。別の要素でディスパッチするだけで十分な攻撃もあります)。 . 最終的には、イベントの再送信を禁止することが最善の解決策であることが判明しました。結局のところ、この機能は実際には必要ありません。まったく同じプロパティ (非表示のデータを除く) を持つ新しいイベント オブジェクトを作成することは、まったく難しいことではありません。

この領域のほとんどすべてのセキュリティ問題は、ファイル入力制御に関連していました。少し前に、Firefox はファイル入力 UI を根本的に変更し、ファイル名を直接入力できないようにすることを決定しました。この変更により、イベントの再送信が問題にならなかったのではないかと思います。しかし、このワームの缶を再び開ける危険を冒す人がいるとは思えません。

于 2011-08-11T22:22:14.050 に答える
1

同じオブジェクトを再利用できない理由MouseEventは、イベント システムがイベント オブジェクトの内部状態を保持しているため、バブリングやキャンセルなどを実装できるためだと思います。個別のイベント オブジェクトの作成に固執する必要がある場合があります。

ドキュメント オブジェクト モデル イベントを読むと、DOM イベント システムのしくみをよりよく理解できる場合があります。

于 2011-08-11T22:02:30.520 に答える
0

あなたが今病気にかかっていることを知らずに、ただ仮定の下に行きます.

イベント関数を作成します。

function clickEvent(event) {
    //do something
}

それを添付します。

obj.onclick = clickHandler;

そして、これを複数のオブジェクトに対して複数回行うことができます。

于 2011-08-11T21:56:31.830 に答える