函数绑定和clone()函数 - Jquery

时间:2010-03-20 15:36:44

标签: jquery function binding clone

克隆元素时我的键盘绑定有问题。这是场景:

我有一个像这样的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函数绑定到我的表行的input元素,如下所示:

$('.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函数不能对克隆行的输入元素起作用。

任何人都可以提供帮助或建议吗?我希望我足够清楚,如果需要解决这个问题,我肯定会添加细节。

问候

3 个答案:

答案 0 :(得分:9)

你有两个真正的选项

  • 使用clone(true),它还将克隆绑定的事件处理程序
  • 将事件委托与live()一起使用,以便将事件处理程序绑定到父元素,从而新添加的行将获得相同的功能

答案 1 :(得分:3)

使用jQuery的live events;这样处理程序将自动绑定到新创建的元素(例如示例中的克隆)。

例如:

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

答案 2 :(得分:2)

使用.live代替.keyup