getScript - 在对话框确认时执行
getScript - execute on dialog confirmation
我有使用传统独立方法加载的脚本
<Script src="wthvideo/wthvideo.js"></script>
工作没有问题。但是当我在 JqueryUi.Dialog 框上单击确认后尝试使用 Ajax/getScript() 方法加载它时 - 脚本不会 run/load 并且开发人员工具不会显示脚本被调用。
其他组件,例如 fadeIn()
效果触发得很好 - 只有 getScript()
失败。查看 JqueryUi API 我没有看到我在哪里错误地实施它,有人可以阐明为什么脚本不会 load/fire 吗?
$( "#fsr" ).dialog({
resizable: false,
height: 350,
width: 550,
modal: true,
buttons: {
"Allow Fullscreen": function() {
launchFullscreen(document.documentElement);
$( this ).dialog( "close" );
$('#title span').fadeIn(2000);
$('#titlesub span').fadeIn(2800);
setTimeout(function(){$('#globe').addClass("globefc");}, 1500);
/*$.ajax({
url: "wthvideo/wthvideo.js",
async: false,
dataType: "script",
success: success
});*/
$.getScript("wthvideo/wthvideo.js");
setTimeout(function(){ $('#wthvideo').remove();}, 39500);
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
您的脚本 (wthvideo.js
) 采用以下形式:
function wthplayer() {
...
}
if (window.addEventListener) {
window.addEventListener("load", wthplayer, false);
} else if (window.attachEvent) {
window.attachEvent("onload", wthplayer);
} else {
window.onload = wthplayer;
}
所以,你只做了两件事:
- 定义函数
- 告诉浏览器在 "onload" 事件触发时执行函数。
您的问题是您在浏览器 onLoad
事件触发 很久之后动态加载 wthvideo.js
脚本 。如果您将脚本 prior 加载到 onLoad
事件,这就是为什么您在使用 <script>
标签时没有问题的原因。
有很多方法可以解决这个问题。一种快速的方法是 check if the onLoad
event has already executed 并立即执行您的函数,如下所示:
function wthplayer() {
...
}
if (document.readyState === 'complete') {
wthplayer();
}
else {
if (window.addEventListener) {
window.addEventListener("load", wthplayer, false);
} else if (window.attachEvent) {
window.attachEvent("onload", wthplayer);
} else {
window.onload = wthplayer;
}
}
我有使用传统独立方法加载的脚本
<Script src="wthvideo/wthvideo.js"></script>
工作没有问题。但是当我在 JqueryUi.Dialog 框上单击确认后尝试使用 Ajax/getScript() 方法加载它时 - 脚本不会 run/load 并且开发人员工具不会显示脚本被调用。
其他组件,例如 fadeIn()
效果触发得很好 - 只有 getScript()
失败。查看 JqueryUi API 我没有看到我在哪里错误地实施它,有人可以阐明为什么脚本不会 load/fire 吗?
$( "#fsr" ).dialog({
resizable: false,
height: 350,
width: 550,
modal: true,
buttons: {
"Allow Fullscreen": function() {
launchFullscreen(document.documentElement);
$( this ).dialog( "close" );
$('#title span').fadeIn(2000);
$('#titlesub span').fadeIn(2800);
setTimeout(function(){$('#globe').addClass("globefc");}, 1500);
/*$.ajax({
url: "wthvideo/wthvideo.js",
async: false,
dataType: "script",
success: success
});*/
$.getScript("wthvideo/wthvideo.js");
setTimeout(function(){ $('#wthvideo').remove();}, 39500);
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
您的脚本 (wthvideo.js
) 采用以下形式:
function wthplayer() {
...
}
if (window.addEventListener) {
window.addEventListener("load", wthplayer, false);
} else if (window.attachEvent) {
window.attachEvent("onload", wthplayer);
} else {
window.onload = wthplayer;
}
所以,你只做了两件事:
- 定义函数
- 告诉浏览器在 "onload" 事件触发时执行函数。
您的问题是您在浏览器 onLoad
事件触发 很久之后动态加载 wthvideo.js
脚本 。如果您将脚本 prior 加载到 onLoad
事件,这就是为什么您在使用 <script>
标签时没有问题的原因。
有很多方法可以解决这个问题。一种快速的方法是 check if the onLoad
event has already executed 并立即执行您的函数,如下所示:
function wthplayer() {
...
}
if (document.readyState === 'complete') {
wthplayer();
}
else {
if (window.addEventListener) {
window.addEventListener("load", wthplayer, false);
} else if (window.attachEvent) {
window.attachEvent("onload", wthplayer);
} else {
window.onload = wthplayer;
}
}