У меня есть следующий код JQuery, который выполняет аналогичные функции, такие как Stackoverflow, где пользователь нажимает ссылку на комментарий и отображает комментарии или в этом случае отвечает на обновление статуса члена, как правило, он отлично работает, за исключением случаев, когда член публикует новое обновление статуса, которое обновляет список обновлений статуса с помощью асинхронной обратной передачи ajax в ASP.net MVC.
Что происходит, если вы нажимаете на новый элемент в списке, он переносит их на новую страницу вместо того, чтобы делать то, что должен делать JQuery.
<script type = "text/javascript">
$(function() {
$("a[id ^='commentLink-']").click(function() {
match = this.id.match(/commentLink-(\d+)/);
container = $("div#commentContainer-" + match[1])
container.toggle();
if (container.is(":visible")) {
container.load($(this).attr("href"));
} else {
container.html("Loading...");
}
return false; //Prevent default action
});
});
</script>
Примечание: Я думаю, что причиной этого является тот факт, что новый элемент в списке на самом деле отсутствует на странице, поскольку список был обновлен с помощью ajax, поэтому новый html отсутствует до тех пор, пока страница не будет обновлена.
Обновлять Хорошо, как мне использовать эту функциональность в реальном времени / событии, о которой Паоло Бергантино говорил в своем ответе, для запуска ASP.net MVC ActionResult?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ознакомьтесь с новой функцией Events/live в jQuery 1.3
Binds a handler to an event (like click) for all current - and future - matched element.
Итак, когда вы добавляете новые элементы, jQuery должен добавлять к ним событие щелчка с этим.
Если по какой-то странной причине вы не хотите обновляться до jQuery 1.3, вы можете проверить плагин livequery.
ИЗМЕНИТЬ в ответ на обновление:
Фактический код для использования .live будет примерно таким:
$(function() {
$("a[id ^='commentLink-']").live('click', function(event) {
match = this.id.match(/commentLink-(\d+)/);
container = $("div#commentContainer-" + match[1])
container.toggle();
if (container.is(":visible")) {
container.load($(this).attr("href"));
} else {
container.html("Loading...");
}
event.preventDefault();
});
});
Изменения, которые были внесены в основном, находятся во второй строке, где
$("a[id ^='commentLink-']").click(function() {
был заменен
$("a[id ^='commentLink-']").live('click', function(event) {
Теперь я также получаю аргумент event для использования для event.preventDefault();, который рекомендуется для остановки событий с помощью jQuery. Однако, если return false; справится с задачей, вы можете оставить это себе.
Я еще не использовал .live, но думаю, это должно помочь. Однако перед тем, как попробовать это, убедитесь, что на вашем сервере установлен jQuery 1.3. :)
Что вы имеете в виду, что элементов на самом деле нет? Я думал, проблема в том, что когда пользователь ввел новое обновление статуса и оно было добавлено на страницу, обработчик кликов не работал, а просто вел себя как обычная ссылка?
Правильно, но список обновляется через ASP.net MVC ajax actionresult, и поэтому, если вы просматриваете источник страницы, эти новые обновления физически там еще, если вы не нажмете F5, чтобы обновить страницу ...
Если элементы обновляются динамически, они не будут отображаться в источнике (если вы не используете «Просмотр созданного исходного кода» в Firefox с помощью подключаемого модуля веб-разработчика), но если вы физически видите их на странице, это то, что вам нужно. В противном случае я запуталась.
Нет, ты прав ... Я запутался ... Тогда ответь мне, как именно я могу использовать эту штуку с живым событием, чтобы вызвать MVC ActionResult?
Спасибо, есть ли конкретный синтаксис для вызова actionResult из инициированного события?
Извините, я не сторонник ASP.NET, я не уверен, что вы имеете в виду ... Если у вас уже есть работающий код AJAX, в котором пользователи могут добавлять обновление статуса, этот код просто присоединит события к новым ссылкам, которые добавляются через это.
Круто на самом деле у меня просто завихрение и это сработало ... большое спасибо за вашу помощь
Да, это выглядит хорошо, но проблема в том, что элементов DOM на самом деле нет ... вот что сбивает JQuery