1

女士们先生们,

我有一个 CRM 页面,它引用了 3 个 js 文件(1 个 jQuery,2 个自定义),所有这些文件都存储在 CRMInstall/isv/ 文件夹中。

在表单的 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):
首页加载(临时 Internet 文件夹中没有文件)

  • 点击 $(document).ready(function(){}) 时出错

第二页加载(所有文件现在都在临时 Internet 文件夹中)

  • 页面/加载功能很好

按 F5(刷新)

  • 点击 $(document).ready(function(){}) 时出错

我哪里错了?是因为我两次添加了对 jQuery 脚本的引用吗?

在这两种情况下,错误都是:

此字段的自定义事件出错。
字段:窗口
事件:加载
错误:预期对象
4

2 回答 2

2

我认为问题在于,当您第一次点击 $(document).ready 函数时,Jquery 还没有完全加载......插入脚本标签并不意味着脚本可以立即使用...... .

第二次加载时,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 回答
0

将 jquery 添加为 web 资源,将您的代码(另一个 web 资源)包装在本机 javascript 函数中,并为调用该函数的 Form OnLoad 添加一个事件。不要忘记将 jquerywebresource 放在自定义代码之前。看这里的例子。

于 2013-04-10T23:26:05.347 回答