2

Ajaxによって更新されているテーブルがあります。新しいデータが追加されたときに何かをしたいのですが、変更が行われているため、AjaxがJSを返すのではなく、プリロードされた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

4

3 に答える 3

2

You could use a pub-sub approach.

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

Then in your layout/design,

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

This way your table code doesn't have to be aware of your layout/design or anything else that may need to know when the table is modified.

于 2012-08-08T18:22:29.780 に答える
1

watch同様の状況で、プロジェクトで呼び出された jQuery プラグインを使用しました。さらに多くの属性を追跡する必要がありましたが、うまく機能しました。

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

于 2012-08-08T17:21:09.277 に答える
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(..)有効なアプローチではありません。なぜなら、ラップされた要素、つまりjQueryオブジェクトに対して.change()機能するイベントハンドラーでは。input, select$()

例えば:

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

また、.lengthjQuery オブジェクトを返しません。.change()したがって、 withは使用できず.length、まったく必要ありません。

于 2012-08-08T17:22:46.540 に答える