2

次のような HTML があるとします。

<a onmouseover='SetTopLeft(this);'href='#'>Click me!</a>

関数でオブジェクトとイベントの両方を取得できますか? たとえば、このようなメソッド シグネチャを使用できますか?

function SetTopLeft(e, o)

...どこで e はイベントで、o は「これ」ですか? 実際にはオブジェクトは必要ないかもしれませんが、おそらくイベントは必要だと思います。これが JavaScript でどのように機能するかをもう少しよく理解してもかまいません。つまり、いつ/どのようにイベントを渡すことができ、いつ/どのように呼び出し元のオブジェクトを渡すことができますか? 合格するものを選択できますか?両方合格できますか?

基本的に、私が実際に行う必要があるのは、アンカーが配置されている DIV 内のマウス座標を取得することです (その DIV が Web ページの一部に過ぎず、ブラウザーがフルスクリーンであるかどうかに関係なく)。それを成し遂げるのにひどい時間を過ごしています。ある要素内でこれらの座標を取得するために私が見たほとんどの例では、イベントと、そのイベントの pageX および pageY プロパティを使用しています。

ちなみに、これは IE 6 以降で動作するはずです。Firefoxもいいでしょう。その他は必要ありません。

4

2 に答える 2

4

はい、インライン コードでthisは、要素の HTML DOM オブジェクトをevent参照し、イベント オブジェクトを参照します。したがって、次のことができます。

HTML

<a onmouseover='SetTopLeft(event, this);' href='#'>Click me!</a>

JavaScript

function SetTopLeft(e, obj) {...}
于 2012-06-24T21:24:02.270 に答える
3

一般に、インライン イベント ハンドラの使用は避けるべきです。表現 (HTML) とロジック (JavaScript) が混在しています。quirksmode.org は、イベント処理について知っておくべきすべての記事のすばらしいコレクションを提供しています。

イベント ハンドラー内では、this通常、ハンドラーがバインドされている要素を参照するため、明示的thisに要素に設定し、イベント オブジェクトを最初の引数として渡すこともできます。

<a onmouseover='SetTopLeft.call(this, event);'href='#'>Click me!</a>

詳細については、 .call() [MDN]を参照してください。

それに加えて、リンクが何にもリンクしていない場合は、単純なspan要素またはボタンを使用して、それに応じてスタイルを設定することをお勧めします。

于 2012-06-24T21:57:29.167 に答える