0

テキスト入力フィールドでのユーザーの「キーアップ」イベントに基づいて、オンザフライで計算を行う Web ページがあります。動的に構築されるかなり大きなページなので、ページ内の他の場所から参照できる値のハッシュ/配列を保持する必要があります。

だから、ページの上部で私はこれをやっています -

var itemBalanceHash = new Array();
var itemID_2_POIDHash = new Array();
var currentPODocumentID;
var warningArray = new Array();

次に、先ほど定義したこれらの変数を使用する関数をいくつか定義します。しかし、これらの関数を定義し終えてから、これらの変数が使用され始めます (つまり、何かでいっぱいになります)。

<script type="text/javascript">                                
itemBalanceHash["${topitem.itemIdentifier}"]="${topitem.itemOutstandingEncumberedAmount}";
itemID_2_POIDHash["${topitem.itemIdentifier}"] = currentPODocumentID;
</script>

このスクリプト ブロックは、作成中のページの途中に表示されます。実際、入力する必要がある行数 (データベースからのクエリの結果セット) に応じて、複数回呼び出されます。

とにかく - これは Firefox でうまく機能します。ただし、IE8、Chrome、Safari では動作しません。古いバージョンの IE ではこれをテストしていません。しかし、そこでも機能しないと思います。

Internet Explorer Debugger が表示するエラー メッセージは次のとおりです。

「itemBalanceHash が定義されていません」

それで、私の質問: これはスコーピングの問題ですか?
Firefox は私のエラーをどこかで修正したようですが、どこでしょうか?

必要に応じて、さらにコードを提供できます。ご協力いただきありがとうございます!
最高です!

4

1 に答える 1

0

問題はiframeにありました!Firefox は、私の JSP ページのすべての JS コードを実行します。IE、Chrome、および Safari では、load イベントをトリガーするイベント リスナーをページにアタッチする必要がありました。これにより、JS コードが実行されます (このオブジェクトのインスタンス化が行われるはずでした)。

とても興味深い。私は Microsoft からこのようなことを期待していましたが、Google と Safari が同様の方法で動作することに驚きました。FF が私の既定のブラウザーであるもう 1 つの理由です。

みんなの助け/反応に感謝します。

乾杯!

于 2012-08-01T16:53:00.023 に答える