jQuery - применять обработчики к элементам, загружаемым после загрузки страницы плагином - PullRequest
1 голос
/ 18 февраля 2010

Прежде всего, я прочитал соответствующие посты здесь, на Stackoverflow, но я все еще застрял.

У меня есть страница, которая загружает данные, используя пользовательский плагин сетки. Эти данные должны иметь ссылку, которая запускает модальное окно (с помощью плагина jqModal). Окно присутствует в html, не извлекается каким-либо вызовом ajax. Так что, если я присоединяю обработчик событий к ссылке, присутствующей на странице HTML, он работает нормально. Если я применю его к ссылке, созданной этим плагином сетки, он не будет работать.

Следующее будет работать со ссылками, уже представленными в html, но не над ссылками, сгенерированными плагином:

$(function() {     
var Foo = $('#Foo');
Foo.jqm({trigger: 'a.bar'});
});

Мне кажется, я понимаю, почему это так, но я не могу решить проблему. live не вырезает его, так как событие, которое должно присоединить это, является загрузкой, а не щелчком или каким-либо другим событием, разрешенным jQuery 1.3.2 (не может использовать версию 1.4). Я подумал, что bind может быть ответом, но я не могу заставить его работать, и я уверен, что только я не "получаю это".

Любые предложения приветствуются, так как я слишком долго стучал об этом.

О, пример того, что я сделал выяснил, как делать с динамически загружаемыми данными:

$('body').click(function(event) {
           if ($(event.target).is('a.bar')) {
               $(event.target).toggleClass('baz');
            }
});

Это успешно добавит класс «baz» к динамически загружаемой ссылке «a.someLink» по щелчку (я думал, что мог бы добавить класс триггера к ссылкам таким образом, но не могу понять, как это сделать при загрузке в отличие от щелчка) но ссылка не вызовет модальное окно, и я не уверен, почему.

РЕДАКТИРОВАТЬ: Я добавляю обратный вызов в плагин пользовательской сетки, но пока я использовал следующее, чтобы заставить работать:

$( '.someclass' ).animate( {opacity: 1}, 2000, function(){
            Foo.jqm({trigger: 'a.bar'});
});

Взломать, но это уловка в крайнем случае.

Ответы [ 3 ]

1 голос
/ 18 февраля 2010

вы можете создать функцию, затем вызывать ее во время вызова ajax после загрузки вещи.

function setEvent()
{
var Foo = $('#Foo'); 
Foo.jqm({trigger: 'a.bar'}); 
};

и в ajax

success: function(msg)
            {
                Loadstuff(msg);
              setEvent();
            }, 
1 голос
/ 18 февраля 2010

Вам нужен какой-то обратный вызов, который запускается при загрузке динамического содержимого.

если jqm является jQueryModal, я считаю, что есть обратный вызов onLoad:

$('#dialog').jqm({
    onLoad:function() {
        // content is loaded?
        console.log(!!$('.bar').length); // true if .bar exists
    }
}); 
0 голосов
/ 15 апреля 2011

Используйте плагин livequery. Я пишу это для людей, которые все еще ищут решение. он запускает запросы / функции после каждого ajaxcall.

см. Здесь: http://docs.jquery.com/Plugins/livequery

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