刷新 CRM 页面导致 jQuery/Javascript 错误

发布于 2024-09-10 23:38:20 字数 1125 浏览 10 评论 0原文

女士们先生们,

我有一个 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 脚本的引用吗?

在这两种情况下,错误都会显示:

此字段的自定义事件发生错误。
字段:窗口
事件:onload
错误:需要对象

Ladies and gents,

I have a CRM page which references 3 js files, (1x jQuery, 2x custom) all stored in the CRMInstall/isv/ folder.

On the form OnLoad method, I am loading each one and then using it to extend/customise the UI.

My inexperience with jQuery is obviously showing however!

The OnLoad code is below:

//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
   });
  });
 });
});

And this causes the following (using IE8):
First page load (no files in temporary internet files folder)

  • error when hitting the $(document).ready(function(){})

Second page load (all files now in temporary internet files folder)

  • page/loads functions fine

hit F5 (refresh)

  • error when hitting the $(document).ready(function(){})

Where am I going wrong? Is it because I am adding a reference to the jQuery script twice?

In both cases the error reads:

There was an error with this field's customized event.
Field:window
Event:onload
Error:Object expected

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情归归情 2024-09-17 23:38:20

我认为问题是,当你第一次点击 $(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!!")
    });
}

I think the problem is that by the time you hit the $(document).ready function the first time, Jquery hasn't fully loaded.... inserting the script tag does not mean that the script is immediately ready for use...

The second time you load it, the js files are already in the cache so the loading is a lot faster, but when you hit F5, it re-loads everything from the server and you are back to the first case.

you could solve this by attaching a function to the onload event of the script node that you're inserting:

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!!")
    });
}
伏妖词 2024-09-17 23:38:20

添加 jquery 作为 Web 资源,将代码(另一个 Web 资源)包装在本机 JavaScript 函数中,并为调用该函数的 Form OnLoad 添加事件。不要忘记将 jquerywebresource 放在自定义代码之前。请参阅示例 在这里

Add jquery as a webresource, wrap your code (another web resource) inside a native javascript function and add an event for the Form OnLoad calling that function. Don't forget to place the jquerywebresource before the custom code. see example here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文