0

これは私のJavaScriptコードです

var helper = document.getElementById("helper");

helper.style.position = "relative";
helper.style.width = "50px";
helper.style.height = "50px";
helper.style.border = "1px solid #000";

function move() {
    helper.style.left = event.offsetX + "px";
    helper.style.top = event.offsetY + "px";
}

そして私のhtmlコード

<div id="grid" onmousemove="move()" onmousedown="down()">
    <div id="helper"></div>
</div>

しかし、その関数を呼び出しても何も起こりません。その変数ヘルパーをバイグローバルにし、すべてを事前に初期化する必要があるため、関数が呼び出されたときにすべてを最初から初期化する必要はありません

4

1 に答える 1

4

関数変数にアクセスできmoveます。私の推測では、あなたが示したコードはページ上の要素の上の要素にあるため、行が実行されるとき、要素はまだ存在していません。helperscripthelpervar helper = document.getElementById("helper");

また、ハンドラーは IE 固有の動作 (グローバルオブジェクト)moveに依存していることにも注意してください。eventこの動作は、互換性のために他の一部のブラウザーでも提供されていますが、すべてのブラウザーで提供されているわけではありません。より広く互換性を持たせるにはevent、引数として受け入れます。

function move(event) {
    // ...
}

...そして、DOM0 ハンドラを次のように更新します。

<div id="grid" onmousemove="move(event)" onmousedown="down(event)">

これが機能するのは、グローバル シンボルがなくても、onXYZハンドラー内のコードが呼び出されるスコープには常にシンボルがあるためです。event

もちろん、古いバージョンの IE ではaddEventListener(を使用します)。attachEvent

于 2013-02-17T12:28:40.253 に答える