2009-11-04 4 views
5

Я пытаюсь установить стиль CSS с помощью .live(). Функция CSS:jQuery .live() и готовый документ

$(".data tr:odd").addClass("evenrows"); 

Есть ли способ, чтобы это произошло автоматически, документ готов, но все еще может случиться для будущих элементов? У меня есть событие ajax на странице, которая переупорядочивает таблицу. Мне нужны эти вновь созданные строки, чтобы применить к ним .addClass.

Заранее спасибо.

+0

Вы можете добавить класс в вызов ajax? – Jason

+0

@ Джейсон, я мог бы, но, как я сказал ниже в комментарии, я хочу, чтобы не переписывать его навсегда ajax-код, который я делаю. Мне нужно только позвонить ему один раз. – jay

ответ

5

Вы можете использовать Livequery plugin. Он связывает себя с DOM мутационных событий для отслеживания изменений в DOM, и повторно привязок и повторно выполняет код привязываться к ним, например:

$(".data tr:odd").livequery(function(){ 
    $(this).addClass("evenrows"); 
}); 
+0

@ pǝlɐɥʞ, это отличное решение, поэтому +1. Я все еще чувствую, что для этого нужно использовать способ .live(). Идея состоит в том, чтобы положить .addClass в $ ("body"). Live ("load", function() {}); которая не работает явно. Есть ли решение, подобное этому, или я отказался использовать подключаемый модуль? – jay

+0

@jeerose Я боюсь, вам придется использовать плагин для этого случая ... Поскольку jQuery.live() предназначен только для привязки событий, и то, что вы пытаетесь сделать здесь, явно не является событием – ekhaled

+0

Вы можете найти из которого событие LiveQuery привязано к документу, и сделайте свою собственную делегацию событий на этом же событии. – Mark

1

Мы достигли этого, подключившись к делегатам мероприятия Ajax и выполняя то, что мы хотим там. См. «Завершить» здесь: http://docs.jquery.com/Ajax/jQuery.ajax#options

Вы должны использовать Live для присоединения любых обработчиков событий к этим новым строкам. См.: http://docs.jquery.com/Events/live#typefn

+0

Я использовал полный. Я просто подумал, что будет более эффективное решение, учитывая, что прямо сейчас у меня есть функция, которая срабатывает, когда DOM готов, тогда я должен прикрепить ее к любым вызовам ajax, которые у меня есть. Я бы предпочел не беспокоиться о том, чтобы помнить об этом. Также это означает, что я пишу его снова и снова для каждого вызова ajax. Мысли? – jay

+0

Вам не нужно писать это, просто вызовите тот же метод в обоих местах. – Mark

0

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

Пример:

GlobalObject.AjaxFunction(sUrl, SData, fnOnSuccess, fnOnError, oExtension) 
{ 
    //Set up Ajax process 

    // check type of extension as a function 
    if (typeof oExtension === 'function') 
    { 
     oExtension(); 
    } 
} 

Это позволило бы код, чтобы иметь доступ к непатентованным для после обработки Ajax.

Надеюсь, что это поможет в контексте ваших потребностей, если я не совсем понял комментарий, чтобы сообщить мне!

Смежные вопросы