jQuery перестает работать на обновленной странице через Ajax в ASP.NET MVC - PullRequest
2 голосов
/ 13 февраля 2009

У меня есть ASP.NET MVC страница событий определенного дня. Я также использую jQuery datepicker, и когда я выбираю день, я создаю функцию, которая отправляет этот выбранный день через Ajax в метод MVC ActionResult, и этот метод будет обрабатывать этот день, будет выполнять всю работу с базой данных и вернет мне все события этого выбранного дня. Пока все хорошо ...

После этого я пытался использовать jQuery cluetip, чтобы показать мне некоторые детали событий через Ajax , и это также сработало ... частично !!!

Почему частично ?? Когда я загружаю страницу в первый раз (и во все первые разы), советы работали отлично и все, что касается Ajax! И во всех первых загрузках на странице будут отображаться события сегодняшнего дня, и это не через Ajax, это просто ViewData ["events"], отправляющий информацию для страницы. Но, если я выберу день, страница обновится через Ajax, но советы больше не будут работать !! Они ничего не показывают ... Я парю ссылки, и ничего не происходит ... ничего, ничего.

Я думаю, что это была проблема с подсказкой, но, к моему удивлению, это не было ...

Просто для целей тестирования я создал это в jQuery:

$(".myLink").click(function(){ alert($(this).attr("id")); }

Когда страница загружается в первый раз, этот код работает, но если я выбираю другой день и страница обновляется, этот код jQuery больше не работает !! Функция щелчка вообще не работает !!

Итак, заканчивая это сомнение ... кто-нибудь знает, что может происходить? Почему мои коды jQuery не работают на обновленной странице ASP.NET MVC через Ajax ??

Спасибо всем !!

Ответы [ 5 ]

3 голосов
/ 22 декабря 2009

Используйте функцию live при привязке событий-

$(".myLink").live("click", function(){
    alert($(this).attr("id"));
});

Это гарантирует, что все элементы с .myLink будут затронуты событием, даже если они будут динамически загружены позже.

Это не работает для каждого события, поэтому проверьте документацию: http://docs.jquery.com/Events/live

1 голос
/ 13 февраля 2009

Добавьте ваши обработчики событий при наведении курсора мыши снова на ajaxComplete. Селекторы jQuery не всегда работают с элементами документа, которые динамически добавляются на страницу, подобно тем, которые возвращаются из вызова AJAX.

Этот код повторно связывает ваше событие сразу после заполнения контента:

$.get("/getMyContent/" + eventID, "{}", function(content) {
  $(".contentArea").html(content);
  $(".eventLink").click(function(){
    doMyPopupEtc();
  });
});
0 голосов
/ 23 сентября 2010

Сначала я подумал, что у меня похожая проблема. Оказалось, однако, что я дважды назначал подсказку, что не давало ей работать.

0 голосов
/ 13 февраля 2009

Невероятно, но вы можете уничтожить JS, который отвечает за отображение подсказки, когда MVC обновляет контейнер в результате вызова AJAX. Это, конечно, если этот JS объявлен встроенным внутри документа.

0 голосов
/ 13 февраля 2009

Это связано с путем. Когда вы ссылаетесь на свои скрипты, обязательно используйте <% Url.Content ("~ / path / to / script")%>

...