Проблема с обратной передачей JQuery Async, как это исправить?

У меня есть следующий код 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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 450
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ознакомьтесь с новой функцией 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. :)

Да, это выглядит хорошо, но проблема в том, что элементов DOM на самом деле нет ... вот что сбивает JQuery

dswatik 21.01.2009 23:39

Что вы имеете в виду, что элементов на самом деле нет? Я думал, проблема в том, что когда пользователь ввел новое обновление статуса и оно было добавлено на страницу, обработчик кликов не работал, а просто вел себя как обычная ссылка?

Paolo Bergantino 21.01.2009 23:50

Правильно, но список обновляется через ASP.net MVC ajax actionresult, и поэтому, если вы просматриваете источник страницы, эти новые обновления физически там еще, если вы не нажмете F5, чтобы обновить страницу ...

dswatik 22.01.2009 00:31

Если элементы обновляются динамически, они не будут отображаться в источнике (если вы не используете «Просмотр созданного исходного кода» в Firefox с помощью подключаемого модуля веб-разработчика), но если вы физически видите их на странице, это то, что вам нужно. В противном случае я запуталась.

Paolo Bergantino 22.01.2009 00:51

Нет, ты прав ... Я запутался ... Тогда ответь мне, как именно я могу использовать эту штуку с живым событием, чтобы вызвать MVC ActionResult?

dswatik 22.01.2009 01:10

Спасибо, есть ли конкретный синтаксис для вызова actionResult из инициированного события?

dswatik 22.01.2009 01:22

Извините, я не сторонник ASP.NET, я не уверен, что вы имеете в виду ... Если у вас уже есть работающий код AJAX, в котором пользователи могут добавлять обновление статуса, этот код просто присоединит события к новым ссылкам, которые добавляются через это.

Paolo Bergantino 22.01.2009 01:25

Круто на самом деле у меня просто завихрение и это сработало ... большое спасибо за вашу помощь

dswatik 22.01.2009 01:35

Другие вопросы по теме