1

ご列席の皆様、

CRMInstall/isv/ フォルダーにすべて保存されている 3 つの js ファイル (1x jQuery、2x カスタム) を参照する CRM ページがあります。

フォームの OnLoad メソッドで、それぞれをロードしてから、それを使用して UI を拡張/カスタマイズしています。

ただし、jQuery の経験不足は明らかです。

OnLoad コードは以下のとおりです。

//jquery
var url = "/isv/jquery-1.4.2.js";
var scriptElement = document.createElement("<script src='" + url + "' language='javascript'>");
document.getElementsByTagName("head")[0].insertAdjacentElement("beforeEnd", scriptElement);


$(document).ready(function() 
{ 
 $.getScript("/isv/common.js", function() 
 {
  $.getScript("/isv/account.js", function() 
  {
   $(document).ready(function() 
   { 
    SetUpAccountForm();//call to account.js
   });
  });
 });
});

これにより、次のことが発生します (IE8 を使用):
最初のページの読み込み (インターネット一時ファイル フォルダーにファイルがない)

  • $(document).ready(function(){}) をヒットしたときのエラー

2 番目のページの読み込み (すべてのファイルが一時インターネット ファイル フォルダーにある)

  • ページ/ロード機能は問題ありません

F5 を押します (更新)

  • $(document).ready(function(){}) をヒットしたときのエラー

どこが間違っていますか?jQueryスクリプトへの参照を2回追加しているためですか?

どちらの場合も、エラーは次のように表示されます。

このフィールドのカスタマイズされたイベントでエラーが発生しました。
フィールド:window
イベント:onload
エラー:オブジェクトが必要です
4

2 に答える 2

2

問題は、最初に $(document).ready 関数を実行するまでに、Jquery が完全にロードされていないことだと思います.. script タグを挿入しても、スクリプトがすぐに使用できるようになるわけではありません.. .

2 回目にロードすると、js ファイルはすでにキャッシュにあるため、ロードははるかに高速ですが、F5 キーを押すと、サーバーからすべてが再ロードされ、最初のケースに戻ります。

これは、挿入するスクリプト ノードの onload イベントに関数を追加することで解決できます。

var url = "http://code.jquery.com/jquery-1.4.2.min.js";

var head = document.getElementsByTagName("head")[0];         
var scriptNode = document.createElement('script');
scriptNode.type = 'text/javascript';
scriptNode.src = url;
scriptNode.onload = jQueryLoaded;
head.appendChild(scriptNode);


function jQueryLoaded()
{
    $(document).ready(function() {
        $("#some").text("Jquery loaded!!")
    });
}
于 2010-07-21T15:38:55.410 に答える