女士和男士,
我有一个CRM页面,它引用了3个js文件,(1x jQuery,2x自定义)全部存储在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文件夹中没有文件)
第二页加载(所有文件现在位于临时Internet文件夹中)
点击F5(刷新)
我哪里错了?是因为我要两次添加对jQuery脚本的引用吗?
在这两种情况下,错误都显示为:
此字段的自定义事件出错 现场:窗口
事件:onload事件
错误:预期的对象
答案 0 :(得分:2)
我认为问题在于,当你第一次点击$(document).ready函数时,Jquery还没有完全加载....插入脚本标记并不意味着脚本立即就绪用...
第二次加载时,js文件已经在缓存中,因此加载速度要快得多,但是当你点击F5时,它会从服务器重新加载所有内容,然后你又回到了第一种情况。 / p>
你可以通过将一个函数附加到你要插入的脚本节点的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!!")
});
}
答案 1 :(得分:0)
将jquery添加为webresource,将您的代码(另一个Web资源)包装在本机javascript函数中,并为调用该函数的Form OnLoad添加一个事件。不要忘记将jquerywebresource放在自定义代码之前。参见示例here。