Я сталкиваюсь с проблемой, когда живая функция jquery не работает для меня постоянно (или то, что я думаю).
У меня та же HTML-форма, которая используется как для добавления нового комментария, так и для редактирования существующего; эта форма распространяется с использованием php-кода на стороне сервера через вызов GET. Две формы отображаются на двух разных вкладках (tab1: добавление комментария, tab2: перечисление комментариев; tab3: редактирование комментария, выбранного на tab2) в зависимости от выбора вкладки. Форма «Добавить комментарий» отображается в качестве основного содержимого tab1; однако форма «редактировать» появляется в зависимости от выбора комментария, который необходимо редактировать на вкладке 2, поэтому предположим, что форма «редактировать комментарий» отображается как tab3. Приведенный ниже код отлично работает для tab1, когда форма является основным содержимым этой вкладки; но он не работает согласованно, когда он является основным содержанием tab3, которое отображается на основании того, какой комментарий необходимо редактировать в tab2.
$("input.sample_radio").live('change',function(){
if ($(this).val() == 'no')
$('#sample_table').hide();
else if ($(this).val() == 'yes')
$('#sample_table').show();
return false;
});
Если вы можете дать мне некоторые мысли, это будет оценено. Мои наблюдения были:
- Я использовал $ ("input [name = 'sample_radio']"), но это не сработало для формы tab3, потому что всегда заканчивалось формой tab1
- используя $ ("input.sample_radio"), я предполагал, что все классы типа sample_radio будут работать, но он также не работает.
- Предполагается, что live привязывает события к новым элементам, добавленным в дерево DOM после вызовов jquery, но, похоже, это не так.
Спасибо
По предложению Марка Шультейса
Просмотрите .delegate (), который был представлен специально для решения этой проблемы, позволив вам указать контекст.
Мне удалось решить эту проблему, привязав событие к выбранным родителям (tab1 и tab3) переключателей, а затем отфильтровав их по селектору, который здесь является названием элемента переключателя и как показано ниже:
$('#tab1,#tab3').delegate('input[name="policy_radio"]','change',function(){
if ($(this).val() == 'no')
$('.policy_table').hide();
else if ($(this).val() == 'yes')
$('.policy_table').show();
return false;
});
Спасибо, что указали мне на это.