Подождите, чтобы запустить Javascript после того, как все частичные файлы загружены на страницу

Приложение, над которым я работаю, является внутренним бизнес-приложением для менеджеров. Это веб-приложение С#. У главного офиса есть экземпляр этого приложения, и он всегда имеет последнюю версию. В каждом магазине есть собственный экземпляр приложения, но он может не всегда иметь последнюю версию. Менеджер входит в приложение основного офиса, а затем выбирает хранилище для просмотра. Этот экземпляр магазина вытягивается в основной части приложения, верхняя строка меню - из экземпляра главного офиса. Таким образом, возможно, что главный офис имеет 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 ответа

Если вы произвольно загружаете частичное с ajax на стороне клиента, вы можете просто добавить полную функцию для вызова:

$( "#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, вы можете установить свойство OnSuccess вашего AjaxOptions, чтобы перезвонить вам:

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

где вы определили функцию OnSuccess в javascript:

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

Есть и другие идеи о том, как включить скрипт в частичное представление или вызвать его во время события ajax success. Как инициализировать jquery ui виджеты, которые могут динамически загружаться в приложении MVC3

Если вы используете Asp.net AJAX, вы можете использовать Sys.Application.add_load(function(){...}).


Вы пробовали использовать

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

});

вместо $ window.load()?

licensed under cc by-sa 3.0 with attribution.