Прослушивание событий изменений в формах: JQuery

У меня есть форма с идентификатором мастера - в этой форме у меня есть только выбранные элементы. Эта форма находится в лайтбоксе с использованием плагина JQuery fancybox:

Я хочу знать, когда какой-либо из них был изменен с помощью JQuery. Как я могу это сделать? В настоящее время у меня есть:

$('form#wizard select[name=servers], form#wizard select[name=cores]').change(function() {
var channels = parseInt($('form#wizard select[name=servers]').val(), 10) * parseInt($('form#wizard select[name=cores]').val(), 10);
$('#yellow').val(channels);
});

EDIT. У меня есть вышеперечисленное, завернутое в $(document).ready(function() {...}

Однако не работает, даже не запускается. Я поместил туда оповещения, и они никогда не появляются. Вышеупомянутое работает только тогда, когда это div, из которого я удалил display:none, странно! Поэтому я ищу другую реализацию, чтобы обойти это, так как мне нужен этот лайтбокс как есть.

Мне действительно нужна помощь в этом.

Спасибо всем


person Abs    schedule 11.10.2009    source источник


Ответы (1)


Функция jQuery change связывает только те элементы, которые присутствуют, когда срабатывает событие domready. Если используемый вами плагин лайтбокса динамически создает элементы, вам следует использовать функцию jQuery live. чтобы «привязать ваш обработчик ко всем текущим и будущим совпавшим элементам».

Измените это:

$('your selector').change(function() { /* code ... */ });

с этим:

$('your selector').live('change', function() { /* code ... */ });
person mtyaka    schedule 11.10.2009
comment
Потрясающий! Это работает лучше, но кажется, что изменения учитываются только один раз? Это должно произойти? - person Abs; 11.10.2009
comment
На самом деле это работает, но элемент span с желтым идентификатором не обновляется, он обновляется, когда я закрываю lightox и повторяю его? Как я могу заставить его вступить в силу сразу после внесения изменений? - person Abs; 11.10.2009
comment
Я предполагаю, что элемент span с желтым идентификатором копируется плагином лайтбокса, что означает, что вы получите два (или более) элемента span с одним и тем же идентификатором. Поскольку идентификаторы должны быть уникальными, jQuery обновляет только исходный (скрытый) диапазон. Попробуйте использовать класс вместо идентификатора. - person mtyaka; 11.10.2009
comment
Вы имеете в виду дать ему желтый класс и ссылаться на него через имя класса? - person Abs; 11.10.2009
comment
Извините, я нуб. Как мне обратиться к классу? Так же? - person Abs; 11.10.2009
comment
Хорошо - это вносит изменение: $('span#[class=yellow2]').html(channels); - это сработало! :) - person Abs; 11.10.2009
comment
Если у вас есть диапазон с желтым классом (‹span class=yellow›...‹/span›), вы можете сделать $('span.yellow').val(channels); - person mtyaka; 11.10.2009
comment
Спасибо, я использовал это. Но у меня есть другая проблема, но у меня есть еще один вопрос для этого! Более чем добро пожаловать, чтобы снова помочь в этом! :) - person Abs; 12.10.2009
comment
Метод live был удален в jQuery 1.9. Дополнительную информацию см. в документах. - person klenwell; 27.02.2014