2010-07-21 51 views
1

女士和男士,刷新CRM頁導致的jQuery/JavaScript錯誤

我有一個CRM頁面它引用3個js文件,(1X 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):
第一頁負荷(Temporary Internet Files文件夾中沒有文件)

  • 錯誤時擊中$(document).ready(function(){})

第二頁加載(所有文件現在在Internet臨時文件夾)

  • 頁/負載功能精細

按F5(刷新)

  • 錯誤擊中時$(文件)。就緒(函數(){ })

我在哪裏出錯了?是否因爲我添加了兩次對jQuery腳本的引用?

在這兩種情況下,錯誤讀取:

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

回答

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!!") 
    }); 
} 
+0

明天當我回到辦公室時,我會試試這個,但這聽起來很有用,感謝示例代碼! – glosrob 2010-07-21 19:34:19

+0

工作完美,謝謝 – glosrob 2010-07-22 06:43:06

0

添加的jQuery作爲webresource,包裹內的原生代碼(另一網絡資源) javascript函數併爲調用該函數的Form OnLoad添加一個事件。不要忘記將jquerywebresource放在自定義代碼之前。請參閱示例here