等待在页面上加载所有部分后运行Javascript

时间:2013-12-04 19:37:40

标签: c# javascript jquery

我正在处理的应用程序是管理员的内部业务应用程序。这是一个C#Web应用程序。主办公室有一个运行此应用程序的实例,它始终具有最新版本。每个商店都有自己运行的应用程序实例,但可能并不总是拥有最新版本。经理登录到主办公室应用程序,然后选择要查看的商店。该商店的实例在应用程序的主要部分被拉出,上面的菜单栏来自主办公室的实例。因此,主办公室可能有v1.8,商店有v1.7。

1.8中有一些功能显示在菜单栏上,我想隐藏在1.7中。主页面有多个部分加载,最后一部分具有特定商店的版本号,该版本号由该商店服务器上的代码确定。因此,获取版本号的唯一方法是在页面上呈现它之后获取它。我遇到的主要问题是我用来隐藏新功能的链接的Javascript在部分版本号加载之前运行。

我需要Javascript等到整个页面完成加载才能执行隐藏代码。此外,该应用程序仅在Chrome中运行。

以下是我隐藏链接的代码:

$(window).load(function () {
    if ($('.version').length !== 0) {
        if (parseFloat($('.version').text().slice(5)) > 1.7) {
            $('.analysis').show();
        } else {
            $('.analysis').hide();
        }
    }
});

2 个答案:

答案 0 :(得分:1)

如果你明确地在客户端使用ajax加载partial,你可以添加一个完整的函数来调用:

$( "#storeContainer" ).load( "url/for/partial", function () {
  if ($('.version').length !== 0) {
    if (parseFloat($('.version').text().slice(5)) > 1.7) {
      $('.analysis').show();
    } else {
      $('.analysis').hide();
    }
  }
}); 

当然,如果可以的话,你可能希望“url / for / partial”使用@ Url.Content或@ Url.Action。

如果您使用的是Ajax Helper,则可以设置AjaxOptions的OnSuccess属性来回拨:

@Ajax.ActionLink("Refresh", 
    "Store", 
     new AjaxOptions { 
         HttpMethod = "POST", 
         UpdateTargetId = "storeContainer", 
         InsertionMode = InsertionMode.Replace, 
         OnSuccess = "updateSuccess" });

您在javascript中定义了OnSuccess函数:

var updateSuccess = function () {
  if ($('.version').length !== 0) {
    if (parseFloat($('.version').text().slice(5)) > 1.7) {
      $('.analysis').show();
    } else {
      $('.analysis').hide();
    }
  }

关于如何在部分视图中包含脚本或在How to initialize jquery ui widgets that may be loaded dynamically in MVC3 application上的ajax成功事件期间调用脚本还有一些其他想法

如果您使用的是Asp.net AJAX,则可以使用Sys.Application.add_load(function(){...})

答案 1 :(得分:0)

您是否尝试过使用

$(document).on("ready", function() {

});

代替$ window.load()?