jQuery绑定更改长度

时间:2012-08-08 17:12:49

标签: javascript javascript-events jquery

我有一个由Ajax更新的表。我想在添加新数据时做一些事情,但由于更改是在外观上,它应该由预加载的JS而不是Ajax返回JS来完成。

我正在寻找像$('table tr').length.change( ... )这样的东西,所以我可以做这样的事情

$('table tr').length.change( function() {
  if ($('table tr').length>1) $('table').show() else $('table').hide()
}

Ajax返回的JS会做这样的事情(比如在Rails中)

$('table').append('<tr> <td><%= @person.name %></td> <td><%= @person.age %></td> </tr>')

(在Rails中,这将在某些/app/views/container_name/method_name.js.erb

3 个答案:

答案 0 :(得分:2)

您可以使用pub-sub方法。

$('table')
   .append('<tr> <td><%= @person.name %></td> <td><%= @person.age %></td> </tr>')
   .trigger('tableModified');

然后在你的布局/设计中,

$('table').on('tableModified',function(){
    if ($('tr', this).length>1) $(this).show() else $(this).hide()
});

这样,您的表格代码不必了解您的布局/设计或修改表格时可能需要知道的任何其他内容。

答案 1 :(得分:1)

我在类似情况下以项目方式使用了一个名为watch的jQuery插件。我必须跟踪更多属性,但它对我很有用:

http://darcyclarke.me/dev/watch/

答案 2 :(得分:0)

在append语句之后尝试show-hide语句。

$('table')
   .append('<tr> <td><%= @person.name %></td> <td><%= @person.age %></td> </tr>');

if( $('table tbody tr').length > 1 ) {
   $('table').show();
} else {
   $('table').hide()
}

注意

$('table tr').length.change(..)不是有效的方法。因为,.change()在一个事件处理程序中,适用于input, select元素包含在$()内的事件,即jQuery对象。

例如:

$('select').change()`, `$('input').change()

此外,.length不返回jQuery对象。因此,您无法将.change().length一起使用,而根本不需要它。