Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   DELEGATE в Jquery ! (https://javascript.ru/forum/jquery/38080-delegate-v-jquery.html)

kapustnik 18.05.2013 13:10

DELEGATE в Jquery !
 
Привет всем!
Столкнулся как и многие с проблемой что событие не работает на новый элемент в подгружаемом аяксом контенте .
В сети много устаревшего материала, в частности рекомендует использовать live() и т.п функции которые в новых версиях Jquery депрессированы :cray:

Я откопал функцию Delegate и она чудесным образом работает, более того походу рекомендуется для новых версий

Но вот почему то , таблицы через плагин tablesorter не хотяи подключатся.

Раньше вызывал так:

$(document).ready(function(){
      $("#tableid").tablesorter();
    });


На подгружаемый элемент, понятно, не работает (хотя ид тот же)
Замечу таблица одна - я просто меняю ее .

пробовал подгружать только TBODY, сделал обертку тег CONTENT
задумка была такая , подгружать не всю таблицу , а только контент ее , а сама таблица по идее остается той же и событие должно продолжать работать ? ( так или нет - опровергните )

Но к сожалению, это не работает , т.е видимо из-за аж двух вложених внутри TABLE (tbody и content) jquery начинает глючить

Короче говоря , надо как то заставить применятся таблесортеру на все последующие элементы

Что то не могу придумать как прописать делегате , ибо в том примере идет через КЛИК , а тут нужно просто что бы ВСЕГДА была включено без всяких кликов и прочего...

kapustnik 18.05.2013 13:29

Щас проверил , даже вызов типа

$("body").delegate("#tableid td", "click", function() {
$("#tableid").tablesorter(); 	
});


Не работает. т.е первый раз работает, а после подгрузки - нет
Странно, но такая же конструкция , для вызова подгрузки элементов работает...

kapustnik 18.05.2013 16:29

$("body").on("click", function(event){
         $("#tableid").tablesorter();
        });


Так работает
Как вместо события КЛИК поставить событие типа "ВСЕГДА"

zebra 18.05.2013 17:52

Перепишите плагин под ваши нужды. Либо просто вызывайте функцию (.tablesorter), после изменения элемента.

BallsShaped 18.05.2013 18:54

$("body").on("click", "#tableid td", function() {
$("#tableid").tablesorter();    
});

kapustnik 18.05.2013 23:36

Цитата:

Либо просто вызывайте функцию (.tablesorter), после изменения элемента.
Как в ON прописать событие "изменение"
Пробую

$("body").on("change", function(event){
         $("#tableid").tablesorter();
        });


Типа изменение боди, т.е всего документа, но не работает

BallsShaped 18.05.2013 23:57

Цитата:

Сообщение от kapustnik
Типа изменение боди, т.е всего документа, но не работает

Значит пробуй по другому. Главное не останавливайся.

kapustnik 21.05.2013 20:33

Зачем хамить?


Часовой пояс GMT +3, время: 06:52.