Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работают события в подгруженых динамически элементах (https://javascript.ru/forum/jquery/7216-ne-rabotayut-sobytiya-v-podgruzhenykh-dinamicheski-ehlementakh.html)

vipka 21.01.2010 14:04

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

есть <select...> при изменение пунктов которого подгружается хтмл код с помощью примерно такого: $("#description").html('бла бла бла');

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

$("#item").change(function()
	{
		alert("test");
	});


подскажите как можно обработать события у второго селекта?

micscr 21.01.2010 14:18

Используйте метод live

vipka 21.01.2010 14:22

спасибо) уже нашел.

надо было так:

$("#item").live("change",function()
{
     alert("test");
});

Octane 21.01.2010 14:36

С появлением метода live резко возросла вероятность получить jQuery головного мозга :D

micscr 21.01.2010 15:26

Цитата:

Сообщение от Octane (Сообщение 41336)
С появлением метода live резко возросла вероятность получить jQuery головного мозга :D

:D
Меня больше всего в live удивляет( и восхищает) что обработчики меняются элементам при изменениях в DOM.

e1f 21.01.2010 17:58

Что? Ничего там не меняется, это банальное навешивание листенера на родителя. Мало того, в 1.3.2 даже не осилили навешивать на контекст, а биндили аж на document. В 1.4 вроде бы уже пофиксили. )

vipka 21.01.2010 23:06

наткнулся на очередную стену для меня.

теперь у подгруженых элементов не могу сменить атрибут(

$('.ctrlHolder').attr("class",$('.ctrlHolder').attr("class") + " error");


тут как я понимаю live уже не поможет... может кто нить подскажет?

micscr 22.01.2010 11:37

Цитата:

Сообщение от vipka (Сообщение 41439)
наткнулся на очередную стену для меня.

Этот код корректен только если такой элемент(.ctrlHolder) один.
А в общем надо:
$('.ctrlHolder').attr("class",
function(){
    return this.className + ' error';
    /* // или так тоже можно
    return $(this).attr('class') + 'error';
   */
});

Цитата:

Сообщение от elf;
Что? Ничего там не меняется, это банальное навешивание листенера на родителя.

да я подозревал что там что-то хитрое, но как это сделано все таки не важно, главное как это работает.

e1f 22.01.2010 14:48

Вротмненоги, да вы что, документацию даже не открываете?
$('.ctrlHolder').addClass('error')

Ну точно jQuery головного мозга.

micscr 22.01.2010 16:03

Цитата:

Сообщение от e1f (Сообщение 41508)
Вротмненоги, да вы что, документацию даже не открываете?
$('.ctrlHolder').addClass('error')

Ну точно jQuery головного мозга.

Я пробел не заметил ... Я так понял у него у элементов классы например xx, yy, zz, а в определенный момент надо чтобы стали xxerror, yyerror, zzerror. Ну ладно. А кто такие Вротмненоги?:)


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