привязка функции и функция clone() - Jquery

У меня проблемы с привязкой клавиш при клонировании элемента. Вот сценарий:

У меня есть такая html-разметка:

<tr class="rijbasis">
   <td>
      <input type="text" class="count" />
   </td>
   <td>
       <span class="cost">10</span>
   </td>
   <td>
       <span class="total">10</span>
   </td>
</tr>

Я привязываю функцию keyup к элементу ввода строки моей таблицы следующим образом:

$('.rijbasis input').keyup(function(){
    var parent = $(this).parent().parent();
     $('.total',parent).text(parseInt($('.cost',parent).text()) * parseInt($('.count',parent).val()));
}

Я разработал такую ​​​​функцию, чтобы я мог клонировать строку таблицы в событии onclick и добавлять ее в tbody:

$('.lineadd').click(function(){
        $('.contract tbody').append($('.contract tbody tr:last').clone());
        $('.contract tbody tr:last input').val("0");
 });

Это все работает, но функция keyup не работает с входными элементами клонированной строки.

Кто-нибудь может помочь или посоветовать? Я надеюсь, что я был достаточно ясен, и я обязательно добавлю детали, если это необходимо для решения этой проблемы.

Привет


person Sam Vloeberghs    schedule 20.03.2010    source источник
comment
хе-хе, спасибо :) Мне очень нравится отличное сообщество мгновенной помощи здесь   -  person Sam Vloeberghs    schedule 20.03.2010


Ответы (3)


У вас есть два реальных варианта

  • используйте clone(true), который также будет клонировать связанные обработчики событий
  • используйте делегирование событий с live(), чтобы обработчик событий был привязан к родительскому элементу, и, таким образом, вновь добавленные строки получат ту же функциональность
person Russ Cam    schedule 20.03.2010
comment
Круто, не знал! Используйте этот, если вы собираетесь только клонировать, я думаю, он будет работать лучше, чем .live. - person Plynx; 20.03.2010
comment
Спасибо, вы спасли мой день - person Anonymous; 28.11.2013

Используйте живые события jQuery; таким образом обработчик будет автоматически привязан к вновь созданным элементам (например, к клонам в вашем примере).

Например:

$('.rijbasis input').live('keyup', function()
{
    var parent = $(this).parent().parent();
    $('.total',parent).text(parseInt($('.cost',parent).text()) * parseInt($('.count',parent).val()));
}
person Will Vousden    schedule 20.03.2010
comment
У меня была полусвязанная проблема, которая разделяла ту же основу этого ответа. Большое спасибо! - person kevtrout; 10.04.2010

Используйте .live вместо .keyup

person Plynx    schedule 20.03.2010