所以我試圖構建一個可嵌入的小部件,它會在外部網站上加載時很好地播放。由於我從來沒有這樣做過,所以我在跟隨由Alex Marandon編寫的偉大教程how to build a web widget。我能夠加載jquery(1.7.1),但是,無論何時我試圖從JS中加載jquery-ui(1.8.16) - 我得到一個JS錯誤,指出「a未定義」。下面的小提琴再現我所看到的:無法動態加載jquery-ui -a未定義
http://jsfiddle.net/malonso/qfBLx/
現在,如果我結合jQuery和jQueryUI的到一個單一的文件,並把它放在我的服務器上工作正常,但就是達不到最佳的多種原因如果可能,我想避免這種情況。另一個奇怪的是,如果我試圖加載任何其他的JS文件來代替jqueryui,文件加載就好了;顯然我錯過了那裏的一些東西。
在此先感謝。
更新:
小提琴包含了所有相關的代碼,但我將包括下列的JavaScript部分。代碼等待,直到瀏覽器加載jquery,然後它發出加載jqueryui的請求。實際上我使用jquery在請求加載jqueryui之前和之後打印調試語句,所以jquery肯定是「可用的」。只是爲了笑笑,我試圖延遲jqueryui的加載,直到瀏覽器確定jquery加載後3秒,並且我遇到同樣的問題。
(function() {
// Localize jQuery variable
var jQuery;
/******** Load jQuery if not present *********/
if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.7.1') {
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src","http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js");
if (script_tag.readyState) {
script_tag.onreadystatechange = function() { // For old versions of IE
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
} else {
script_tag.onload = scriptLoadHandler;
}
// Try to find the head, otherwise default to the documentElement
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
} else {
// The jQuery version on the window is the one we want to use
jQuery = window.jQuery;
main();
}
/******** Called once jQuery has loaded ******/
function scriptLoadHandler() {
// Restore $ and window.jQuery to their previous values and store the
// new jQuery in our local jQuery variable
jQuery = window.jQuery.noConflict(true);
// Call our main function
main();
}
/******** Our main function ********/
function main() {
jQuery(document).ready(function($) {
loadJS();
});
}
function loadJS(){
jQuery('#debug').append("About to load jquery-ui<br>");
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src","http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js");
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
jQuery('#debug').append("Request made to load jquery-ui<br>");
}
})(); // We call our anonymous function immediately
謝謝湯姆,我很欣賞快速反應。我傾向於不同意這與問題無關。問題是加載jqueryui *會導致錯誤。我甚至沒有試圖在我附加的代碼中做任何事情而不是簡單地加載它。 – malonso 2012-02-07 12:53:37