Недавно я добавил функцию в наше веб-приложение ASP.NET MVC. Появляется страница, которая отображается, когда пользователь нажимает на элемент в таблице. На странице используется AJAX для отображения частичного представления в одном div
в HTML-странице страницы. В частичном представлении используется пользовательский интерфейс Telerik Kendo для определения и отображения диалогов и элементов управления DropDownList
. Это сложно в том, что импорт JavaScript находится на странице View
, а PartialView
просто создает HTML-код, который будет отображаться в div
.Несколько обработчиков событий jQuery document.read, работающих в неправильном порядке
JavaScript Я написал на странице включает в себя обработчик событий с jQuery document.ready
:
$(document).ready(
function() {
if ($('#details-map').val() != '')
$('#details-map').remove();
var urlTail = '?t=' + (new Date().getTime());
// Make the AJAX call and load the result into the details box.
$('#detailsbox').load('<%= Url.Action("Details") %>' + '/' + '<%: Model.Id %>' + urlTail, displayDetails);
}
)
Это прекрасно работает, когда я запустить приложение на моем локальном хосте. Проблема возникает при развертывании страницы на нашем сервере разработки. В этом случае, есть дополнительный обработчик document.ready
события, которое испускаемый до самого конца страницы расширений Telerik Кендо/ASP.net MVC:
<script type="text/javascript">
//<![CDATA[
jQuery(document).ready(function(){
if(!jQuery.telerik) jQuery.telerik = {};
jQuery.telerik.cultureInfo=...;
});
//]]>
</script>
На этой странице, обработчик $(document).ready
событий я написал пробеги до Telerik обработчик, и мой код явно зависит от обработчика Telerik, работающего в первую очередь. Когда моя первая работает, я получаю ошибку JavaScript, в которой говорится: «jQuery.telerik.load не является функцией».
Поскольку этого не происходит на моем локальном хосте, как я могу убедиться, что обработчик события, подготовленного вторым документом, запустить первый
Edit:
После дополнительных исследований, я обнаружил, что проблема заключается в том, что два сценария, упомянутые в моем ответе, который, как предполагается, должны быть записаны на страницу с помощью следующей строки в Master Страница, используемая мной страницами:
<%= Html.Telerik().ScriptRegistrar().Globalization(true).jQuery(false).DefaultGroup(group => group.Combined(false).Compress(false)) %>
Не загружаются. Другими словами, указанная выше строка ничего не делает. Однако он работает на другой странице, которая использует одну и ту же главную страницу. Я поместил точку останова на линии, и она выполняется. У кого-нибудь есть идеи?
Странно то, что я не могу найти второй обработчик события document.ready' в коде, испускаемом моим локальным хостом на странице в любом месте. Что вызывает вопрос о том, как функция telerik инициализируется в этом случае? Думаю, мне придется пойти с функцией голосования. Мне тоже это не очень нравится, но я не вижу, как заставить мой код появляться после кода telerik. Я проверю, есть ли событие в коде telerik, в которое я могу подключиться. –
Очевидно, что я думал, что проблема не проблема. Я нашел способ получить код готового документа, который появится в том же блоке, что и код, добавленный Telerik после их кода, и проблема все еще происходит. Я даже попытался добавить ваш код, и $ .telerik определяется так, что таймер никогда не запускается. Мой код работает до завершения, но другой код, который выполняется после частичного загрузки, удаляется с ошибкой «jQuery.telerik.load не является функцией» (в Firefox, аналогичные, но разные сообщения происходят в IE и Chrome). –
Жаль, что это не помогло. Я не совсем знаком с Telerik или Kendo, поэтому я, возможно, достиг своего предела знания по этому вопросу. Вы можете проверить наличие '$ .telerik && $ .telerik.load'? – kalley