0

わかりました、ここの人々は私の素晴らしい反重力ライブラリです。私はそれをオブジェクトリテラルとして定義しようとしています。これは、クールな子供たちがライブラリをカプセル化するために行っていることをすべて読んでいます。基本的なテストでは正常に動作していることがわかりますが、オブジェクト内から document.body が見えないようです。

ページをクリックすると、「動作しています」というアラートが表示されます。代わりに、document.body=null エラーが発生します。何が与えますか?私の体はどこですか?マウスイベントを設定できないのはなぜですか? 私はこれで金曜日の一日を無駄にしました!ガッ!

antigrav={
activate:function(){
    // turn on antigrav
    document.body.onmousedown = antigrav.startPan();
},

startPan:function(event){
    alert('it is working!');
},

}

document.onload=antigrav.activate();
4

3 に答える 3

4

あなたはおそらくやりたい

document.onload=antigrav.activate;

括弧を使用すると、antigrav.activateをdocument.onloadハンドラーとして実行することを示すのではなく、antigrav.activate()を実行document.onloadした結果に設定します。したがって、ドキュメントがロードされる前に、割り当てを行うためにactivate()が実行されていたため、document.bodyはまだ定義されていませんでした。

onmousedownハンドラーの割り当てについても同じことを行います。

document.body.onmousedown = antigrav.startPan;

これを試してみると、window.onloadに切り替える必要もありました...

また、オブジェクトリテラル定義の末尾のコンマに注意してください。Firefoxはそれらに問題はありませんが、IEは窒息します。だから、全体として:

var antigrav={
    activate:function(){
        // turn on antigrav
        document.body.onmousedown = antigrav.startPan;
    },
    startPan:function(event){
        alert('it is working!');
    }
};
window.onload=antigrav.activate;
于 2009-01-17T05:26:58.547 に答える
0

わかりました、現在のステータスは次のとおりです。

var antigrav={
activate:function(){
    // turn on antigrav
    alert('started');
    document.body.onmouseup = antigrav.startPan;
    // make flash shield
},

startPan:function(event){
    alert('dude, you are panning!');
},


}
antigrav.activate();
//document.onload=window.antigrav.startPan;

「alert('started')」まで到達しますが、それでも「error:document.bodyisnull」をスローします。コメント化された行は同じ結果になります...

于 2009-01-17T06:07:46.497 に答える
0

わかりました、人々、私はばかですが、とにかくあなたは皆とても役に立ちました。

/ real /の問題であり、何の関係もありません。body.onclickの動作の奇妙な癖が明らかになります。

/ HTML /で、クリックをテストするために大きなドキュメントを設定しようとしました。

<html>
<script src="antigrav.js"></script>
<body onload='test()'>
<!--<body onload="antigrav.activate();"  >-->

    yo, fool, this is the body!

    <div style="position:absolute; top:2000px;  left:2000px;">
        it is mad wide and tall!
    </div>

</body>
</html>

体を伸ばすために、2000px、2000pxにdivを配置しました。スクロールバーがあります、体は巨大でなければなりませんね?実際には、div間のすべてのスペースには、body要素を含めて/まったく/何も含まれていません。document.body.onclick ...をトリガーするには、実際のテキストをクリックする必要があります。

奇妙なことに(これは明らかにされた「奇妙な癖」です)、bodyタグにonclick = "foo()"を指定すると、存在しないbody領域を含め、ページ上の任意の場所をクリックするとfoo()がトリガーされます。これがなぜなのか私にはわかりませんが、それが実際の問題でした。あなたの助けの人々に感謝します、あなたは他のいくつかの良いテクニックも指摘しました。

于 2009-01-17T16:41:02.243 に答える