jQuery Live - срабатывает при добавлении элемента на страницу - PullRequest
0 голосов
/ 15 октября 2011

В моем представлении MVC происходит обновление Ajax.Он отображает сообщение, информирующее пользователя о завершении операции:

<% if (ViewData["colorOptionsMessage"] != null) { %>
    <span class="ajaxMessage"><%= ViewData["colorOptionsMessage"] %></span>
<% } %>

Я хочу автоматически исчезнуть это сообщение, как только оно появится, и я хотел бы сделать это один раз, ипусть это работает по всему сайту.Это то, что я попробовал, но это не работает (сообщение появляется, но предупреждение не отображается):

$(function () {
   $(".ajaxMessage").live("load", function () { 
      alert("once I can get this to show I'll put in a jueryUI fadeOut"); });
});

РЕДАКТИРОВАТЬ

Просто чтобы быть ясноМне не нужна помощь с кодом затухания;Мне просто нужна помощь, чтобы этот вызов Live () правильно подключился.

Ответы [ 5 ]

2 голосов
/ 15 октября 2011

Нет прямого способа получать информацию автоматически при добавлении новых элементов на страницу. $('.ajaxMessage').live('load') происходит только в том случае, если событие load запускается для изображения, iframe или объекта / embed / applet с class="ajaxMessage", событие load не запускается со своей собственной целью для каждого нового элемента, который входит на страницу.

Это можно сделать только с помощью (a) событий мутации DOM , которые обычно недостаточно широко поддерживаются, или (b) постоянно опрашивают, чтобы выбрать селектор .ajaxMessage и посмотреть, есть ли какие-либо новые элементы появляются в результатах.

Лучше вручную $('.ajaxMessage', function() {...}) сразу после (потенциально) добавления содержимого на страницу в обработчике success метода ajax().

ETA:

этот обработчик jQuery, похоже, не выполняется после успешного выполнения ajaxForm

Если вы не можете поймать success напрямую, вы можете попробовать зарегистрировать глобальный обработчик успеха, используя ajaxSuccess.

1 голос
/ 15 октября 2011

В приведенном ниже коде предполагается, что вы совершили Ajax-вызов через jQuery.если вызов ajax не был выполнен через jQuery, игнорируйте этот ответ.Можем ли мы увидеть сам вызов ajax?

 <Script type="text/javascript">
    $(function () {
// this is a jQuery global ajax event that fires for every ajax, you need to check the URL
       $.ajaxSuccess(function(e, xhr, settings){
          if (settings.url == 'URI/ for/ajax /message/load.') {
          alert("once I can get this to show I'll put in a jueryUI fadeOut"); 
        }
       });
    );

    </script>
0 голосов
/ 15 октября 2011

Как я знаю, события "ready" и "load" не поддерживаются jQuery в "live".Таким образом, вы можете использовать плагины как этот http://startbigthinksmall.wordpress.com/2011/04/20/announcing-jquery-live-ready-1-0-release/ Вот демо http://cdn.bitbucket.org/larscorneliussen/jquery.liveready/downloads/demo.html

0 голосов
/ 15 октября 2011

Не думаю, что вы можете привязать нагрузку к промежутку.

только к ТЕЛЕ ИЗОБРАЖЕНИЯ IMGAME

0 голосов
/ 15 октября 2011

Когда я хочу что-то добавить, подождать несколько и скрыть это, я использую функцию setTimeout вместо живых событий. Я добавляю код при успешном обратном вызове.

Это 1 секунда ожидания:

setTimeout(function(){ $("ajaxMessage").fadeOut(); }, 1000)

Конечно, если вы не хотите ждать, просто fadeOut элемент в обратном вызове успеха.

Вам этого может быть достаточно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...