getScript - 执行对话框确认

时间:2016-01-06 20:53:19

标签: jquery ajax jquery-ui-dialog getscript

我有使用传统独立方法加载的脚本

<Script src="wthvideo/wthvideo.js"></script>

没有问题。但是当我在JqueryUi.Dialog框上单击确认后尝试使用Ajax / getScript()方法加载它时 - 脚本将无法运行/加载,并且开发人员工具不会显示脚本被调用。

fadeIn()效果等其他组件触发得很好 - 只有getScript()失败。看看JqueryUi API,我没看到我错误地将它搞砸了,有人可以解释为什么脚本不会加载/触发吗?

$( "#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" );
        }
      }
    });

1 个答案:

答案 0 :(得分:0)

您的脚本(wthvideo.js)采用以下格式:

function wthplayer() {
  ...
}

if (window.addEventListener) {
    window.addEventListener("load", wthplayer, false);
} else if (window.attachEvent) {
    window.attachEvent("onload", wthplayer);
} else {
    window.onload = wthplayer;
}

所以,你只做两件事:

  1. 定义功能
  2. 当“onload”事件触发时,告诉浏览器执行该功能。
  3. 您的问题是,您在浏览器wthvideo.js事件触发后很长时间内动态加载onLoad脚本 。如果您将之前的 加载到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;
      }
    }