2

私が現在取り組んでいる Web アプリケーションで、javascript ドキュメントの可視性を扱う風変わりな何かに遭遇しました。このアプリケーションには、ノードとエッジのネットワークを表す InfoVis グラフを含む div があり、ドラッグ ズーム機能を実装しています。よく知らない場合 (おそらく)、InfoVis は、グラフやその他の視覚化を HTML5 キャンバスにレンダリングする js ライブラリです。

外観と機能をカスタマイズするために、InfoVis のコア .js に多くの変更を加えました。そこにドラッグ ズームを実装する予定でした。

<script../>私が取り組んでいる .html ページは、InfoVis コアとタグ付きの独自の .js ファイルの両方をロードします。

InfoVis コアでonMouseDown: function(e) { alert("click"); }は、キャンバスの背景の定義は期待どおりに機能しますが、(実際の .html ファイルでインスタンス化され、.css ファイルでスタイル設定された) div を次のように変更すると、次のようになります。

onMouseDown: function(e) {
  e = e || window.event;
  dragging = true;
  $("#dragZoom")[0].style = "display: block; width: 0px; height: 0px; left: "+e.clientX+"; top: "+e.clientY+";";
}

div の新しいスタイルを設定するに$("#dragZoom")は、未定義[0]です。つまり、javscript ブロックはドキュメント内の div を認識できません。

ただし、別の .js ファイル (InfoVis コアではない) で関数を定義すると、function foo() { alert($("#dragZoom")[0]); }このように foo() を呼び出すことができます。

onMouseDown: function(e) {
  foo();
}

そして foo() は div にアクセスできます!

両方が同じ方法でロードされているときに、これが 1 つの .js ファイルから見えて、別の .js ファイルから見えないのはなぜですか? これは私が何かを達成するのを妨げているわけではありませんが、それはかなり奇妙だと思い、何が起こっているのかを知りたいと思いました. 情報をありがとう!

4

0 に答える 0